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: 15 let
|
0