Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 4. 3. 2013, 17:11:45
Zdravim
potreboval by som poradit s dotazom: Chcem aby sa vybrali tabulky takto: SELECT table1.*, table2.*, table3.* FROM table1 JOIN table2 USING(id_table) JOIN table3 ale obsah tabulky 3 vybrat len ked obsahuje data WHERE table1.id_table=1 da sa to cez 1 dotaz ? alebo musim spravit 2 dotazy vdaka M. |
||
Kajman Profil |
#2 · Zasláno: 4. 3. 2013, 19:20:17
Pro tabulku table3 použijte left join a tu podmínku nedávejte do where ale do on u toho joinu.
|
||
Monkeys Profil * |
#3 · Zasláno: 4. 3. 2013, 22:24:59 · Upravil/a: Monkeys
vyriesil som to takto:
SELECT table1.*, table2.*, table3.*, table4.* FROM table1 LEFT JOIN table2 ON table1.id_table1=table2.id_table2 LEFT JOIN table3 ON table2.id_table2=table3.id_table3 LEFT JOIN table4 ON table4.id_table4=table3.id_table3 WHERE IF(table4.id_table4 IS NOT NULL, table3.id_table3 IS NOT NULL, table4.id_table4 IS NULL) AND table1.id_table1="'.intval($id).'" pisem to z hlavy mozno sa stal niekde preklep M. este riesim jednu zaludnost ako aktualizovat tabulku1 na zaklade tabulky2 ktora ma jeden zo stlpcov 0 (nulovy) a tabulku1 aktualizovat v stlpci neakym stringom. najlepsie v jednom SQL prikaze neako cez INNER JOIN M. |
||
Monkeys Profil * |
#4 · Zasláno: 5. 3. 2013, 21:34:37
Chcem sa len opytat ci je realne mozne v jednom UPDATE dotaze aktualizovat na zaklade zaznamov z inej tabulky ?
Riesim to cely den. a este mam otazku: Hodnota NULL = 0 alebo NULL = "" (teda prazdny) dakujem M. |
||
Tori Profil |
Monkeys:
„ako aktualizovat tabulku1 na zaklade tabulky2“ Místo jedné tabulky dáte několik a pro aktualizaci vyjmenujete sloupce jen z jedné tabulky, např. UPDATE t1 LEFT JOIN t2 on t1.id = t2.id_t1 SET t1.kopirovanySloupec = t2.sloupec, t1.jinySloupec = IFNULL(t2.jinySloupec, '') |
||
Monkeys Profil * |
#6 · Zasláno: 5. 3. 2013, 22:11:37
Tori:
dakujem este predtym ako som si precital vas prispevok som vymyslel nieco taketo myslim ze to splna to co chcem len nemozem to rozbehat :) $this->database->MyQuery("UPDATE produkt SET dostupnost='Nedostupný', priznaky='Neaktívny' WHERE EXISTS(SELECT skladovost FROM basket WHERE skladovost='0' AND id_basket IN (".implode(",",array_keys(array_map("intval",$_SESSION['kosik']))).")"); mozte mi poradit ? dakujem M: |
||
Tori Profil |
#7 · Zasláno: 5. 3. 2013, 22:14:35
Monkeys:
V poddotazu myslím chybí vazba na tab.produktů. Bez toho vám to stejným způsobem updatuje (nebo neupdatuje) všechny řádky v tab.produktů. |
||
Monkeys Profil * |
#8 · Zasláno: 5. 3. 2013, 22:27:35
Tori:
Funguje to problem bol tu: $this->database->MyQuery("UPDATE produkt SET dostupnost='Nedostupný', priznaky='Neaktívny' WHERE EXISTS(SELECT skladovost FROM basket WHERE skladovost='0' ) AND id_basket IN (".implode(",",array_keys(array_map("intval",$_SESSION['kosik']))).")"); M. |
||
Monkeys Profil * |
#9 · Zasláno: 6. 3. 2013, 21:21:11
tak Tori: mali ste nakoniec pravdu updatuje mi to vsetky riadky naraz to som zistil az dnes ...
Momentalne to skusam zas takto neako ale tiez bez vysledku. $update = $this->database->MyQuery("UPDATE produkt LEFT JOIN basket USING(id_basket) SET dostupnost='".$this->database->EscapeString($nedostupny)."', priznaky='".$this->database->EscapeString($neaktivny)."' CASE basket.skladovost WHEN IS NULL THEN basket.id_basket IN (".implode(",",array_keys(array_map("intval",$_SESSION['kosik']))).") ELSE '' END"); Princip je jednoduchy ak sa skladovost dostane na 0 tak chcem zakazat zobrazenie tych produktov ktore sa minuli. Dakujem za kazdu dobru radu M. |
||
Monkeys Profil * |
#10 · Zasláno: 6. 3. 2013, 22:54:38
Tak som to vyriesil uz funguje ako ma:
UPDATE produkt JOIN basket USING(id_basket) SET produkt.dostupnost='".$this->database->EscapeString($nedostupny)."', produkt.priznaky='".$this->database->EscapeString($neaktivny)."' WHERE basket.skladovost='0' len nerozumiem preco nefunguje aj tento zapis UPDATE produkt JOIN basket USING(id_basket) SET produkt.dostupnost='".$this->database->EscapeString($nedostupny)."', produkt.priznaky='".$this->database->EscapeString($neaktivny)."' WHERE basket.skladovost IS NULL M. |
||
Tori Profil |
#11 · Zasláno: 6. 3. 2013, 23:13:16
Monkeys:
JOIN == INNER JOIN, takže výsledkem spojení tabulek jsou pouze záznamy, které existují v obou tabulkách. Jestli se nepletu, IS NULL by prošlo v případě, že a) sloupeček skladovost může být nulový a některý záznam tu hodnotu obsahuje, a/nebo b) místo JOIN použijete LEFT JOIN (tj. jako nedostupné se označí i produkty, které nebudou nalezeny v tabulce basket). |
||
Časová prodleva: 11 let
|
0