ugrás a tartalomhoz

SQL táblák azonos adatain keresztül egy másik táblába

unregistered · 2012. Már. 1. (Cs), 20.11
Sziasztok!

Segítsetek kérlek mert már hülyét kapok, elment az egész napom a kísérletezgetéssel!

Van 3 táblám (tabla1, tabla2, tabla3) ebben a három táblában vannak oszlopok aminek az adatai azonosak a másik táblával. Pl tabla1 id mezője megegyezik tabla2 id_index mezeivel majd a tabla3-ban van megint egy id_index mező ami meg megegyezik a tabla2 id_index oszlopával...

Az a gond hogy nem tudom sehogy kiválasztani a három táblából a sorokat és azzal eljutni a végső táblához hogy abból randomra válasszon egy sort.

Részletesebben: randomra kiválasztok egy sort tabla1-ből majd veszem a random sor id mezőt majd azt megkeresem a tabla2-ben hol található, azok eredményeiből szintén randomra választok és az eredménnyel eljátszom ugyanezt...

Na a gondom a randommal van...

Az addig oké hogy:
SELECT * from tabla1 WHERE tabla1.id = tabla2.id_index
De nem jövök rá sehogy hogy lehet ezeket többszörösen összekötni és a végén a tabla3-ból valsztani.

Ez így nem működik az biztos:
SELECT * from tabla3 WHERE (tabla1.id = tabla2.id_index AND tabla2.id_index = tabla3.id_index) ORDER BY RAND()
Előre is köszönöm a fejtágítást!
 
1

JOIN

Poetro · 2012. Már. 1. (Cs), 20.31
Jelen esetben INNER JOIN vagy LEFT JOIN lesz a megoldás.
2

Nem is fog működni

Pepita · 2012. Már. 1. (Cs), 20.53
Mármint a második. Azért, mert a lekérdezésben nincsen SELECT a tabla1-re és tabla2-re, tehát az oszlopneveikre hiába akarsz hivatkozni. A WHERE feltétel vhogy így:
... WHERE tabla3.id_index = (SELECT id_index FROM tabla2 WHERE id_index = (SELECT id FROM tabla1 ORDER BY valami))
Nem százas, hogy ez így jó (nem próbáltam), a belső SELECT a lényeg. Az ORDER BY -odban a RAND() felől is kétségeim vannak, hogy azt hozza, amit vársz. Ezt próbáld ki csak tabla1-re külön, és ha azt a véletlent produkálja amit szeretnél, akkor tedd be az "én" WHERE-embe a "valami" helyére.

Én - magamtól fejből - inkább néznék előbb egy MAX(id) from tabla1-et, és ebből csinálnék egy PHP random-ot.

Szerk: Poetro gyorsabb és jobb volt, rá hallgass.
3

:)

unregistered · 2012. Már. 1. (Cs), 22.32
Uraim!

1000 köszönet! Mint kiderül a tudatlanság volt a hunyó! :D
(hiába na, nem szoktam SQL-ezni)

Amúgy a megfejtés, ha valaki ide tévedne ilyen ügyben:

SELECT tabla3.ertek FROM tabla3 INNER JOIN (SELECT tabla2.id_index FROM tabla2 INNER JOIN tabla1 ON tabla1.id=tabla2.id_index) tabla2 ON tabla2.id_index=tabla3.id_index ORDER BY RAND() LIMIT 1
4

Örülök, hogy sikerült

Pepita · 2012. Már. 2. (P), 21.33
:)