Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak wyciagnąć z kilku tabel rekordy o tej samej nazwie ?, j.w.
adamski9000
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.11.2011

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


Witam wszystkich forumowiczów.
Mam następujący problem z wydawało by się prostym zapytaniem sql. Jednakże meczę się z tym od kilku dni. Na googlu ciężko znaleźć odpowiedz, gdyż trudno jasno zdefiniować pytanie (IMG:style_emoticons/default/smile.gif)

Mianowicie mam 4 poniższe tabele. Próbuję wyciągnąć z nic wszystkie dane łącznie z informacja o numerach telefonu. No i tu zaczyna się problem. Zapytanie które stosuje:

  1. SELECT * FROM rozmowy,smsy,numery_telefonow,raporty
  2. WHERE raporty.id_raport='$id_raport'
  3. AND rozmowy.id_raport=raporty.id_raport
  4. AND smsy.id_raport=raporty.id_raport
  5. AND numery_telefonow.id_numer_telefonu=rozmowy.id_numer_telefonu
  6. AND numery_telefonow.id_numer_telefonu=smsy.id_numer_telefonu
  7. AND numery_telefonow.id_numer_telefonu=raporty.id_numer_telefonu
  8. ORDER BY smsy.DATA DESC


Powyższe zapytanie wyświetla jeden wynikowy rekord i to tylko z jednym numerem telefonu. W dodatku nie wiem której tabeli ten numer tel. dotyczy. A gdzie reszta numerów ? Nie ma !

1) Dlatego pytanie, jak zrobić aby wyświetlały się wszystkie przypisane numery telefonu przypisane do danego rekordu ?
2) Dodatkowo chciałbym kolejno wyświetlic wyniki sortując rozmowy,smsy wg daty. Ale jak to zrobić to już nie mam pojęcia. Sortowanie przez ORDER BY smsy.data nie zda rezultatu.

Bardzo bym prosił doświadczonych użytkowników o pomoc w tym męczącym mnie problemie (IMG:style_emoticons/default/smile.gif)


ROZMOWY
-------
id_rozmowa
adreat
data
id_numer_telefonu
id_raport


SMSY
-----
id_sms
adresat
data
id_numer_telefonu
tresc
id_raport


NUMERY_TELEFONOW
----------------
id_numer_telefonu
numer_telefonu


RAPORTY
-------
id_raport
data
id_numer_telefonu
imei


Z góry dziękuję

Ten post edytował adamski9000 29.11.2011, 20:08:57
Go to the top of the page
+Quote Post
Sztef89
post
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

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


wydaje mi się ze musisz skorzystać z funkcji JOIN aby połączyć tabele.
Tu wszystko jest ładnie opisane: http://www.elektroonline.pl/a/2460,Komenda...SQL,baza_wiedzy
Dasz radę (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
sunpietro
post
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 26
Dołączył: 23.01.2009
Skąd: eZ Systems

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


skorzystaj z aliasów dla pól, zamiast *. Na przykład, zamiast:
  1. SELECT * FROM .....

Zrób tak:
  1. SELECT r.adresat AS "rozmowa_adresat", s.adresat AS "sms_adresat" .... FROM rozmowy r JOIN smsy s ON r.id_raport=s.id_raport


To tylko przykład, ale pokazuje o co kaman, a przy okazji przyspieszasz zapytanie wybierając tylko to co Ci jest potrzebne.
Go to the top of the page
+Quote Post
toaspzoo
post
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


  1.  
  2. $zap = mysql_query("
  3. SELECT * FROM rozmowy,smsy,numery_telefonow,raporty
  4. WHERE raporty.id_raport='$id_raport'
  5. AND rozmowy.id_raport=raporty.id_raport
  6. AND smsy.id_raport=raporty.id_raport
  7. AND numery_telefonow.id_numer_telefonu=rozmowy.id_numer_telefonu
  8. AND numery_telefonow.id_numer_telefonu=smsy.id_numer_telefonu
  9. AND numery_telefonow.id_numer_telefonu=raporty.id_numer_telefonu
  10. ORDER BY smsy.DATA DESC;");
  11.  
  12. $il = mysql_num_rows($zap);
  13.  
  14. for($i=0;$i<$il;$i++)
  15. {
  16. $wiersz = mysql_fetch_array($zap);
  17.  
  18. echo $w['wiersz'];
  19.  
  20. }


oczwiście nie wiem, jaka funkcja zastępuje u Ciebie mysql_query

bez pętli wyświetlisz tylko jeden rekord
Go to the top of the page
+Quote Post
adamski9000
post
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.11.2011

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



No to utknąłęm na dobre ! Mimo przestudiowania kilku poradnikow z SQL nadal nie mogę odnaleźć odpowiedzi na ten wydawalo by się banalny problem. Nigdzie nie jest napisane jak wyciagnac z kilku tabel wiersz o tej samej nazwie kolumny. Uzycie JOIN nie rozwiązuje problemu. Nawet jeśli zwraca poprawną ilość rekordów to nadal nie wysiwtlają się wyniki z kolumn o tej samej nazwie ( id_numer_telefonu ). Wyswietla się jeden numer telefonu dla danej kolumny i żaden więcej. Aliasy też nie dają rozwiązania. Bo niby jak nadać alias dla kolumny której nie ma.

Kicha, nie wiem jak to dalej ugryzć, choć jestem przekonany, że rozwiązanie jest stosunkowo proste. Tylko jak je odnaleźć ? (IMG:style_emoticons/default/wink.gif)

pozdrawiam
Adam
Go to the top of the page
+Quote Post
toaspzoo
post
Post #6





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


select
tabela1.kolumna as nazwa jaka bede sie poslugiwal
tabela2.kolumna as nazwamojanowa
tabela3.kolumna as nazwa_moja

a w 1 zapytaniu na dole piszesz order by smsy nie podajac kolumny, np ordr by smsy.id
Go to the top of the page
+Quote Post
adamski9000
post
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.11.2011

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


To jak sie aliasy nadaje to ja wiem, ale to nie rozwiazuje problemu. Tylko jak nadac nazwę kolumnie, która ma powstac z polaczenia dwóch kolumn np. telefony.id_numer_telefonu=numery_telefonow.id_numer_telefonu AND smsy.id_numer_telefonu=numery_telefonow.id_numer_telefonu. W SELECIE wybieramy tylko rozmowy.id_numer_telefonu, gdyz nie ma bezposredniej kolumny rozmowy.numer_telefonu.

  1. SELECT
  2.  
  3. RO.id_numer_telefonu AS ro_id_num_tel,
  4. RA.id_numer_telefonu AS ra_id_num_tel,
  5. S.id_numer_telefonu AS s_id_num_tel,
  6. NT.numer_telefonu AS nt_num_tel
  7.  
  8. FROM
  9.  
  10. rozmowy AS RO,
  11. smsy AS S,
  12. numery_telefonow AS NT,
  13. raporty AS RA
  14.  
  15. WHERE
  16.  
  17. RA.id_raport=1 AND
  18. RO.id_raport=RA.id_raport AND
  19. S.id_raport=RA.id_raport AND
  20. NT.id_numer_telefonu=RA.id_numer_telefonu AND
  21. NT.id_numer_telefonu=RO.id_numer_telefonu AND
  22. NT.id_numer_telefonu=S.id_numer_telefonu


Powyzsze zapytanie generuje wyniki tylko z jednym i tym samym numerem telefonu i w dodatku generuje nie takie wyniki jakie bym sobie zyczyl (IMG:style_emoticons/default/wink.gif) , wiec gdzies tu jest błąd logiczny.

Poprawnie natomiast zwraca wyniki poniższa komenda z JOIN, jednak nadal nie wyswietla wszystkich kolumn z numerami telefonow, a powinny byc przeciez 2 kolumny z numerami telefonow. Jest tylko jedna.
  1. SELECT *
  2. FROM numery_telefonow
  3. JOIN rozmowy USING(id_numer_telefonu)








Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 05:05