Autor Zpráva
mardon
Profil
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
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
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
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
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
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
tisíceré díky nyní již funguje dle mých představ, budu muset pořádně dostudovat SELECTy v MySQL

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: