Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
one_eddie
Mam 2 tabele:

Kod
Tabela Logi:
+----+---------+------+
| id | idosoby | data |
+----+---------+------+

tabela osoby:
+----+------+----------+
| id | imie | nazwisko |
+----+------+----------+


napisalem zapytanie ktore wypisuje mi wszystkie logi i zamiast wraz z id pokazuje imie nazwisko:

Tabela wynikowa:
Kod
+----+---------+------+----------+------+
| id | idosoby | imie | nazwisko | data |
+----+---------+------+----------+------+


Napisalem to tak:

  1. SELECT l.Id, l.idosoby, o.imie, o.nazwisko, l.DATA
  2. FROM logi l, osoby o WHERE o.Id = l.idosoby ORDER BY l.DATA;


Wszystko jest ok tyle ze jest jeszcze admin ktorego nie chce trzymac razem z osobami jego id jest rowne 0. Wiec probowalem zamienic zapytanie na:

  1. SELECT l.Id, l.idosoby, o.imie, o.nazwisko, l.DATA
  2. FROM logi l, osoby o WHERE (o.Id = l.idosoby) OR (l.idosoby=0) ORDER BY l.DATA;


Ale to nie daje poprawnych wynikow?

jesli ktos ma jakis pomysl jak to napisac bede wdzieczny.
dag
Cytat(one_eddie @ 2005-07-07 22:52:50)
  1. SELECT l.Id, l.idosoby, o.imie, o.nazwisko, l.DATA
  2. FROM logi l, osoby o WHERE (o.Id = l.idosoby) OR (l.idosoby=0) ORDER BY l.DATA;


Ale to nie daje poprawnych wynikow?

jesli ktos ma jakis pomysl jak to napisac bede wdzieczny.

Spróbuj:
  1. SELECT l.Id, l.idosoby, o.imie, o.nazwisko, l.DATA
  2. FROM logi l, osoby o WHERE (o.Id = l.idosoby) AND (l.idosoby<span style="font-weight: bold;">!=0) ORDER BY l.DATA;
one_eddie
Nie dziala:

Ale zastanawia mnie dzialanie tego zapytania:
(o.Id = l.idosoby) AND (l.idosoby!=0)

lewy warunek nigdy nie bedzie spelniony. a ze to And to cale zapytanie odpada. mam racje?
dag
  1. SELECT *
  2. FROM logi l LEFT JOIN osoby o ON (l.idosoby=o.logi AND l.idosoby!=0)


Pokombinuj z czymś takim
one_eddie
Wielkie dzieki poprawilem to
  1. SELECT *
  2. FROM logi l LEFT JOIN osoby o ON (l.idosoby=o.logi AND l.idosoby!=0)


na:

  1. SELECT l.Id, l.idosoby, o.imie, o.nazwisko, l.DATA
  2. FROM logi l LEFT JOIN osoby o ON (l.idosoby=p.id AND l.idosoby!=0)


i dziala smile.gif

jesli nie ma osoby daje NULL-e jesli jest pojawiaja sie dane
To zapytanie ktore prze-edytowales dzialalo to:

  1. ELECT *
  2. FROM logi l LEFT JOIN osoby o ON (l.idosoby=o.logi) WHERE l.idosoby!=0


nie dziala. Podaje tylko te wpisy ktore maja dane. pozatym musialem we obydwu poprawic o.logi na o.id, nie wiem co rozumiesz przez o.logi ale jest to blad.

Dzieki!
dag
Cytat(one_eddie @ 2005-07-07 23:41:55)
Musialem we obydwu poprawic o.logi na o.id, nie wiem co rozumiesz przez o.logi ale jest to blad.

Dzieki!

Chodzilo mi oczywiście o.id zamiast o.logi ;-) pisałem na szybko więc stąd ta pomyłka winksmiley.jpg W przykładzie pobierałem wszystkie pola bo to, które pola pobierzesz zależy już tylko od Ciebie.

Cieszę się, że Ci pomogłem winksmiley.jpg Pozdrawiam

BTW. Padam z nóg, jestem bardzo zmęczony hehe winksmiley.jpg Dobra już nic nie piszę, bo robię OT ;-)
one_eddie
ok rozumiem. Jeszcze raz wielkie dzieki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.