| Autor | Zpráva | ||
|---|---|---|---|
| mardon Profil |
#1 · Zasláno: 9. 6. 2009, 13:09:17
mám pole s názvem a id kategorie
DibiRow Object ( [id] => 0 [name] => Kadeřnictví ) DibiRow Object ( [id] => 1 [name] => Masáže ) DibiRow Object ( [id] => 2 [name] => Kosmetika ) DibiRow Object ( [id] => 4 [name] => Pedikůra ) DibiRow Object ( [id] => 3 [name] => Nehtová studia ) a pole $pocet , kde mám key jako id kategorie a hodnota je počet odkazů v kategorii jak přidat pole $pocet k poli výše. abych dostala: DibiRow Object ( [id] => 0 [name] => Kadeřnictví [num]=>6) DibiRow Object ( [id] => 1 [name] => Masáže [num]=>5) DibiRow Object ( [id] => 2 [name] => Kosmetika [num]=>2 ) DibiRow Object ( [id] => 4 [name] => Pedikůra [num]=>1) DibiRow Object ( [id] => 3 [name] => Nehtová studia [num]=>7) předem díky za pomoc |
||
| AM_ Profil |
#2 · Zasláno: 9. 6. 2009, 13:21:19
Dotazuješ se do databáze neefektivním způsobem, pomocí spojování tabulek lze toto pole dostat rovnou při prvním dotazu. Něco jako:
SELECT kategorie.id, kategorie.name, COUNT(odkazy.id) AS pocet FROM kategorie JOIN odkazy ON kategorie.id=odkazy.kategorie GROUP BY id |
||
| mardon Profil |
#3 · Zasláno: 9. 6. 2009, 13:24:20 · Upravil/a: mardon
aha, zajímavé to mě nenapadlo, zkusím to prozkoumat
děkuji mnohokráte Nevěděl by někdo jak to zapsat v dibi ? |
||
| Majkl578 Profil |
#4 · Zasláno: 9. 6. 2009, 14:19:31
dibi::test('
SELECT [cat.id],
[cat.name],
COUNT([links.id]) AS [linkCount]
FROM [categoriesTable] AS [category]
INNER JOIN [linksTable] AS [links]
ON [links.category] = [cat.id]
GROUP BY [cat.id]
');
SELECT `cat`.`id`, `cat`.`name`, COUNT(`links`.`id`) AS `linkCount` FROM `categoriesTable` AS `category` INNER JOIN `linksTable` AS `links` ON `links`.`category` = `cat`.`id` GROUP BY `cat`.`id` |
||
| mardon Profil |
#5 · Zasláno: 9. 6. 2009, 19:26:18
„SELECT [cat.id],
[cat.name], COUNT([links.id]) AS [linkCount] FROM [categoriesTable] AS [category] INNER JOIN [linksTable] AS [links] ON [links.category] = [cat.id] GROUP BY [cat.id] ');“ ano díky tohle funguje,ted to ale jeste komlikuji s tim , ze u service mam sloupec visible, pokud je 1 je verejna pokud ne neni verejna takze funkci jsem upravila public function get_all_cat (){
$res = dibi::query('
SELECT cat.id,cat.name,
COUNT(ser.id_cat) AS num
FROM category AS cat
INNER JOIN service AS ser
ON ser.id_cat = cat.id
WHERE ser.visible=1
GROUP BY [cat.id]
');coz sice funguje ale vypise mi jen kategorie, která mají nejaké service, já bych ale chtela vypsat vsechny kategori tedy i ty , kter nemaji servce a u nich doplnit num jako 0 |
||
| AM_ Profil |
#6 · Zasláno: 9. 6. 2009, 20:08:02
v tom případě místo INNER JOIN použij LEFT JOIN, do WHERE pak ještě musíš přidat OR ser.visible IS NULL (protože v řádcích category, kde se nepovede přiřadit service, se sloupce od service vyplní jako NULL)
takže: $res = dibi::query('
SELECT cat.id,cat.name,
COUNT(ser.id_cat) AS num
FROM category AS cat
LEFT JOIN service AS ser
ON ser.id_cat = cat.id
WHERE ser.visible=1 OR ser.visible IS NULL
GROUP BY [cat.id] |
||
| mardon Profil |
#7 · Zasláno: 9. 6. 2009, 20:11:31 · Upravil/a: mardon
tisíceré díky nyní již funguje dle mých představ, budu muset pořádně dostudovat SELECTy v MySQL
|
||
|
Časová prodleva: 17 let
|
|||
0