Autor | Zpráva | ||
---|---|---|---|
Pontiac Profil |
#1 · Zasláno: 26. 1. 2009, 19:38:45 · Upravil/a: Pontiac
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 * |
#2 · Zasláno: 26. 1. 2009, 19:48:16
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 |
#3 · Zasláno: 26. 1. 2009, 19:54:47
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 * |
#4 · Zasláno: 26. 1. 2009, 19:57:56
Násobí se články, komentáře a přístupy. Zkuste to s tím group by v poddotaze, jak jsem ukazoval.
|
||
Joker Profil |
#5 · Zasláno: 26. 1. 2009, 21:22:44
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 |
#6 · Zasláno: 26. 1. 2009, 21:32:19 · Upravil/a: Pontiac
„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 |
#7 · Zasláno: 26. 1. 2009, 21:34:03
„„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ů.“ |
||
Časová prodleva: 15 let
|
0