Autor Zpráva
Meldo
Profil
Zdravim, potreboval by som poradit s jednym mysql prikazom.

Mam jednu tabulku, kde mam registrovanych uzivatelov. Kazdy ma jedinecne id. Tabulka sa vola users_login.

Potom mam dalsie 4 tabulky, kde su dalsie data k uzivatelom. Su to tabulky: girls, boys, babies, pets.

No a co potrebujem. Chcem vyhladat vsetkych uzivatelov, ktory maju v tabulke girls, alebo boys atd. nejaku hodnotu. Napriklad je tam krajina. Cize som si spravil taketo volanie:

SELECT users_login.id 
FROM   users_login, 
       girls_users, 
       boys_users, 
       babies_users, 
       pets_users 
WHERE  users_login.id = girls_users.id_login 
       AND users_login.id = boys_users.id_login 
       AND users_login.id = babies_users.id_login 
       AND users_login.id = pets_users.id_login 
       AND girls_users.krajina = 'SK' 
       AND boys_users.krajina = 'SK' 
       AND babies_users.krajina = 'SK' 
       AND pets_users.krajina = 'SK'

ale akosi mi to nefunguje, nevracia to ziadne vysledky, aj ked by malo :)
Nejaky napad ako to vylepsit, alebo kde je chyba?
Joker
Profil
Meldo:
Ten uvedený dotaz vybere takový řádek, který (se stejným ID) existuje ve všech uvedených tabulkách a zároveň má ve všech nastavené krajina='SK'.
Což asi nebyl záměr.

Já bych ale v první řadě začal otázkou:
Proč jsou vlastně ta data rozdělena do čtyř tabulek?
Meldo
Profil
Zamer to nebol. Ako to teda upravit. Skusam OR ale bezvysledne...

No rozdelene su preto, pretoze kazdy typ uzivatela ma ine parametre. Kazdopadne, teraz sa s tym uz nic neda robit, musim pracovat s tym, ako to je.
Kajman
Profil
Šťastně ten návrh nemáte, ale možná půjde něco takového...

SELECT users_login.id
FROM   users_login
       LEFT JOIN girls_users
              ON users_login.id = girls_users.id_login
                 AND girls_users.krajina = 'SK'
       LEFT JOIN boys_users
              ON users_login.id = boys_users.id_login
                 AND boys_users.krajina = 'SK'
       LEFT JOIN babies_users
              ON users_login.id = babies_users.id_login
                 AND babies_users.krajina = 'SK'
       LEFT JOIN pets_users
              ON users_login.id = pets_users.id_login
                 AND pets_users.krajina = 'SK'
WHERE  ( girls_users.id_login IS NOT NULL
          OR boys_users.id_login IS NOT NULL
          OR babies_users.id_login IS NOT NULL
          OR pets_users.id_login IS NOT NULL )
Meldo
Profil
Ok diky Kajmane. Vyzera to, ze nieco z toho bude :)

A pre buducnost, ako riesit ten navrh DB?

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