Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 20. 4. 2011, 13:23:19 · Upravil/a: Medvídek
Zdravím,
v databázích nejsem moc zběhlej, proto bych potřeboval poradit s jednim dotazem. Nevím, jestli to pujde vložit do jednoho dotazu. Při přihlášení uživatele potřebuju zjisti všechny jeho objekty, k tomu zjsitit, jestli v druhé tabulce neexistuje nové zařízení k jeho objektům, pokud ano, tak vložit. Nyní bych to dělal na tři dotazy takto: //VYBER OBJEKTU K DANEMU UZIVATELI SELECT id FROM ob WHERE uid = 13 while($o=mysql_fetch_array......) //VYBER VSECH ZARIZENI, KTERE JESTE NEJSOU V DB, TY BYCH POTREBOVAL VLOZIT A POKUD MOZNO, TAK MISTO PODMINKY (im.oid = $o["id"]) ABY TO PROVEDLO U VSECH OBJEKTU PRIHLASENEHO UZIVATELE SELECT DISTINCT(pid) FROM im WHERE NOT EXISTS (SELECT oid FROM pir WHERE im.pid = pir.pid) AND im.oid = $o["id"] while($d=........) INSERT INTO ob (pid) VALUES ('".$d["pid"]."') Snad mě chápete. Dá se to složit do jednoho dotazu (nebo alespoň do dvou?) |
||
Kajman_ Profil * |
#2 · Zasláno: 20. 4. 2011, 14:37:10
INSERT INTO ob (pid) SELECT DISTINCT(pid) FROM im WHERE NOT EXISTS (SELECT oid FROM pir WHERE im.pid = pir.pid) AND im.oid IN (SELECT id FROM ob WHERE uid = 13) |
||
Medvídek Profil |
#3 · Zasláno: 20. 4. 2011, 15:05:25
Kajman:
Ó, děkuji moc, ani ve snu mě nenapadlo, že to je takhle lehký :) A pokud budu chtít vložit více druhů hodnot, tak přepokládám bude takto: INSERT INTO ob (pid, hid, mid, bid) SELECT DISTINCT(pid), hid, mid, bid FROM im WHERE NOT EXISTS (SELECT oid FROM pir WHERE im.pid = pir.pid) AND im.oid IN (SELECT id FROM ob WHERE uid = 13) |
||
Kajman_ Profil * |
#4 · Zasláno: 20. 4. 2011, 16:01:59
Ano, viz. http://dev.mysql.com/doc/refman/5.5/en/insert-select.html (s tím, že pid není třeba obalovat závorkami, distinct se vztahuje ke kombinaci všech vypisovaných sloupců).
|
||
Medvídek Profil |
#5 · Zasláno: 20. 4. 2011, 16:45:42
Kajman:
„distinct se vztahuje ke kombinaci všech vypisovaných sloupců“ No já potřebuju, aby se vztahoval pouze na pid, jelikož hid, mid a bid už stejné mohou být. |
||
Časová prodleva: 13 let
|
0