Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> łączenie dwóch tabel, gdy coś istnieje, i nie łączenie gdy tego nie ma
slepiec
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 23.08.2007

Ostrzeżenie: (0%)
-----


mam takie coś :
  1. SELECT k_bb.IDU,IDG,k_bb.IDB,TIME_TO_SEC(TIMEDIFF(now(),EndTime)) AS tim,lvl
  2. FROM k_bb,k_cb WHERE TIME_TO_SEC(TIMEDIFF(now(),EndTime)) > 0 AND k_bb.IDC=1 AND k_bb.IDB = k_cb.IDB;


wszystko niby działa, ale chciałbym by gdy w tabeli k_cb nie ma wpisu o taki IDB, do lvl wpisało -1.
Aktualnie gdy nie ma takiego wpisu w k_cb wyniku nie ma wcale - co chyba zrozumiałe.

-----edycja :

uporałem się, zostawiam to dla innych :
  1. SELECT k_bb.IDU,IDG,k_bb.IDB,TIME_TO_SEC(TIMEDIFF(now(),EndTime)) AS tim,
  2. IF(NOT EXISTS (SELECT lvl FROM k_cb WHERE k_cb.IDB=k_bb.IDB),-1,k_cb.lvl ) AS lvl
  3. FROM k_bb,k_cb WHERE TIME_TO_SEC(TIMEDIFF(now(),EndTime)) > 0 AND k_bb.IDC=1 AND (k_bb.IDB = k_cb.IDB OR NOT EXISTS (SELECT lvl FROM k_cb WHERE k_cb.IDB=k_bb.IDB))
  4. ;

taka radosna twórczość, jak by ktoś wiedział jak to ładniej zapisać to chętnie skorzystał.

Ten post edytował slepiec 16.09.2007, 22:32:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


jeżeli nie jest bardzo konieczne te -1 to możesz użyć OUTER JOIN, po prostu jeśli nie istnieje to w miejsce gdzie Ty chcesz -1 wstawi Ci NULL a potem w PHP juz myślę że dasz sobie z tym radę

pseudoSQL:

  1. SELECT *
  2. FROM k_bb LEFT OUTER JOIN k_cb WHERE k_bb.IDB = k_cb.IDB


(ps nie studiowałem Twojego zapytania więc oczywiście warunki pobrania i połączenia tabel sam musisz ustawić)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 03:42