Autor Zpráva
pepino22
Profil *
Ahoj,

měl bych na Vás prosbu, nedaří se mi z databáze vytáhnout potřebná data :(.

Mám 3 tabulky:
user, photo, point

se strukturou:
user (tabulka uzivatelu na webu):
id / name / login / password

photo (tabulka fotek. Kazdy uzivatel muze nahrat X fotek):
id / user_id / system_name

point (tabulka hodnoceni fotek (uzivatele mohou hodnitit fotky, ovsem z 1 IP jen 1 hlas pro jednu fotku, proto zvlastni tabulka))
photo_id / ip

Jde o to, ze bych potreboval idealne jednim dotazem vytahnout vsechny fotky na zaklade zadaneho ID uzivatele (photo.user_id = user.id) a zaroven spocitat pocet bodu pro danou fotku (nejspise spocitat pocet radku, kde photo.id = point.photo_id). Lze to provest jednim dotazem?? Bohuzel se mi to nejak nedari :(
Tori
Profil
SELECT f.*, COUNT(p.*) 'body'
FROM `user` u 
INNER JOIN photo f ON u.id = f.user_id
LEFT JOIN point p ON f.id = p.photo_id
WHERE u.id = 123
GROUP BY f.id
Pokud uživatel nemá fotky, dotaz vrací nula řádků výsledků (předpokládám, že údaje o uživateli už máte načtené a nepotřebujete je z tohoto dotazu).
pepino22
Profil *
presne tak, ID uzivatele je to jedine co znam, jdu to ozkouset, zatim dekuju moc.


Tori:

tak jsem to vyzkousel a narazil na problem, se kterym jsem dosud bojoval.

Dotaz:
        return dibi::fetchAll('
            SELECT
                f.*, count(p.photo_id) body
            FROM
                user u
            INNER JOIN
                photo f ON u.id = f.user_id 
            LEFT JOIN
                point p ON f.id = p.photo_id
            WHERE
                u.id = %i', $user->id,'
            ');

Vraceno jsem dostal:
array(1) [
   0 => DibiRow(4) {
      id => "46" (2)
      user_id => "21" (2)
      system_name => "nazev_fotky" (33)
      body => "2"
   }
]

ale v databazi mam ulozene 3 fotky a jen jedna fotka (s ID 46) ma v tabule point ulozene 2 radky (tedy 2 hlasy). Potreboval bych z databaze dostat pole fotek, kde by u kazde byl i pocet hlasu, takto mi to vraci vzdy jen jeden zaznam (i kdyz jsem zkousel pro kazdou fotku dat nekolik hlasu).
Tori
Profil
pepino22:
Skleróza, pardon, mělo tam být ještě "GROUP BY f.id". Doplněno do [#2].
slovakCZ
Profil
Tori:
Uz to funguje, to je prada :o) dekuju mockrat!
//pardon za predchozi prispevek pod neprihlasenym uzivatelem, psal jsem to zdomu kde jsem v prohlizeci nemel ulozene udaje a nepamatuji si heslo :o)

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:

0