Autor Zpráva
Pontiac
Profil
Dobrý den, mám 4 tabulky
1. registrovani_uzivatele - id, prihlasovaci_jmeno, emailova_adresa...
2. komentare - id, uzivatel, komentar...
3. ip_pristupy_profil - id, uzivatel, datum...
4. clanky - id, uzivatel, clanek...

registrovani_uzivatele
id | prihlasovaci_jmeno | emailova_adresa
1 Pavel aaa@aa.aa
2 Petr bbb@bb.bb

komentare
id | uzivatel | komentar
1 Pavel blablabla
2 Petr blablabla

...a takhle pokračujou i zbylé dvě tabulky články a návštěvy(ip_pristupy_profil), kde je sloupeček uzivatel stejný jako prihlasovaci_jmeno u tabulky registrovani_uzivatele = tudíž ho hodlám použít jako spojení mezi tabulkama.

Potřebuju vypsat údaje do jedný tabulky a to aby obsahovala
jméno uživatele | počet komentářů | počet návštěv | počet článků
Pavel 5 1 1


A můj problém je ohledně SQL dotazu, který údajně funguje alespoň po stránce - syntaxe, jenže vyhazuje nesmyslné výsledky typu, že uživatel třeba
Pavel 256, 256, 256 nebo Petr 1800, 1800, 1800. Jednak není možné aby se všechny tři údaje rovnali a tolik záznamů v DB ani není.

SELECT registrovani_uzivatele.prihlasovaci_jmeno, count('id') AS pocet_komentaru, count('id') AS pocet_navstev, count('id') AS pocet_clanky FROM registrovani_uzivatele

JOIN komentare ON (registrovani_uzivatele.prihlasovaci_jmeno =  komentare.uzivatel)
JOIN ip_pristupy_profil ON (registrovani_uzivatele.prihlasovaci_jmeno = ip_pristupy_profil.uzivatel)
JOIN clanky ON (registrovani_uzivatele.prihlasovaci_jmeno = clanky.uzivatel)
GROUP by registrovani_uzivatele.prihlasovaci_jmeno


Děkuji za každou pomoc.
Kajman_
Profil *
Co si v těch třech tabulkách zapisovat id uživatele místo jeho jména. Pak ušetříte nejen místo, ale bude se uživatel moci i přejmenovat, bude-li to třeba. Zkuste připojit již zgroupované všechny tři tabulky podle takovéhoto vzoru...

select u.prihlasovaci_jmeno, t.komentaru 
from registrovani_uzivatele u
left join (select k.uzivatel, count(*) komentaru from komenate k group by k.uzivatel) t on u.prihlasovaci_jmeno=k.uzivatel
Pontiac
Profil
Bohužel už mám navrženou databázy takto, takže se mi jedná o to co je na tom SQL dotazu špatného nebo nesmyslného.
Kajman_
Profil *
Násobí se články, komentáře a přístupy. Zkuste to s tím group by v poddotaze, jak jsem ukazoval.
Joker
Profil
Pontiac
Jednak není možné aby se všechny tři údaje rovnaly a tolik záznamů v DB ani není.
Proč by nebylo?

SELECT ... count('id') AS pocet_komentaru, count('id') AS pocet_navstev, count('id') AS pocet_clanky FROM...
Vybírá se třikrát ta samá hodnota, takže by spíš bylo divné, kdyby se ty údaje lišily.
Pontiac
Profil
SELECT ... count('id') AS pocet_komentaru, count('id') AS pocet_navstev, count('id') AS pocet_clanky FROM...

tak jak nastavím aby se count('id') nastavím aby se načítal z tabulky komentáře, další count z návštěv a poslední z článků.
Pontiac
Profil
„SELECT ... count('id') AS pocet_komentaru, count('id') AS pocet_navstev, count('id') AS pocet_clanky FROM... “
tak jak nastavím aby se count('id') načítal z tabulky komentáře, další count z návštěv a poslední z článků.

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: