Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Łączenie dwóch tabel
Forum PHP.pl > Forum > Przedszkole
eurosoft
Witam,
jestem raczkującym w temacie SQL, proszę o podpowiedź w jaki sposób mogę wyświetlić na ekranie dane z dwóch tabel w odpowiedniej kolejności kolumn.

Struktura baz wygląda tak:

- TABELA SHOT -
id_shot
id_book
animal
rodzaj_animal
ilosc
ilosc_shot

- TABELA BOOK -
id_book
imie
start
end

zapytanie powinno agregować następujący wynik:
book.id_book | book.imie | book.start | shot.animal | shot.rodzaj_animal | shot.ilosc

dziękuję za wyrozumiałość i podpoweiedź

Pozdrawiam
Marcin
motyl-pl
  1. SELECT book.id_book, book.imie, book.start, shot.animal, shot.rodzaj_animal, shot.ilosc
  2. FROM book
  3. LEFT JOIN shot
  4. ON book.id_book=shoot.id_book


W ten deseń jakoś więcej masz tu:
http://www.w3schools.com/sql/sql_join_left.asp
sadistic_son
  1. SELECT book.id_book , book.imie , book.start , shot.animal , shot.rodzaj_animal , shot.ilosc FROM book, shot WHERE shot.id_book = book.id_book
eurosoft
Cytat(motyl-pl @ 5.11.2010, 11:55:15 ) *
  1. SELECT book.id_book, book.imie, book.start, shot.animal, shot.rodzaj_animal, shot.ilosc
  2. FROM book
  3. LEFT JOIN shot
  4. ON book.id_book=shoot.id_book


W ten deseń jakoś więcej masz tu:
http://www.w3schools.com/sql/sql_join_left.asp


Dzięki serdeczne.
Mam jeszcze jedno pytanie, w tablicy shot nie wszystkie pola są z wartościami, niektóre są puste, jak sprawić aby były również wyświetlane w tabeli. Teraz mam plamy a chciałym kratki bez wartości.

dzięki raz jeszcze
motyl-pl
  1. if($pobrane['przyklad'] == "") {
  2. echo " ";
  3. }
eurosoft
zapytanie działa poprawnie, ale niestety tylko na pierwszej stronie (mam zastosowana paginację stron) na kolejnych stronach, dzieją się dziwne rzeczy. Jeśli na pierwszej stronie w rekordach tabeli nr 1 i 4 doklejone zostały właściwe kolumny to na stronie drugiej , trzeciej itd w rekordach 1 i 4 są te same wartości.....:-( co mogłem skopać...?

  1. $sql = "SELECT book.id_book, book.imie_nazwisko, book.start_pol, shot.animals, shot.ilosc, shot.ilosc_shot, shot.login
  2. FROM book LEFT JOIN shot ON $tabela.id_book=$tabela1.id_book";



TX

Cytat(motyl-pl @ 6.11.2010, 00:13:14 ) *
  1. if($pobrane['przyklad'] == "") {
  2. echo " ";
  3. }



kurczę a tak dokładniej co z tym zrobić..... sad.gif
CuteOne
Poczytaj jak używać paginacji smile.gif

$start = ($nr_strony-1) * $max_ilosc_wynikow;
$end = $start + $max_ilosc_wynikow;

dodaj $start i $end do zapytania i gotowe

Cytat
kurczę a tak dokładniej co z tym zrobić.....

wstaw to do pętli wyświetlającej wyniki. jeżeli dany wynik jest pusty nie zrobi ci się "plama" ponieważ wstawiony został znak [& nbsp ;  to spacja]
eurosoft
Cytat(CuteOne @ 8.11.2010, 07:02:48 ) *
Poczytaj jak używać paginacji smile.gif

$start = ($nr_strony-1) * $max_ilosc_wynikow;
$end = $start + $max_ilosc_wynikow;

dodaj $start i $end do zapytania i gotowe


wstaw to do pętli wyświetlającej wyniki. jeżeli dany wynik jest pusty nie zrobi ci się "plama" ponieważ wstawiony został znak [& nbsp ;  to spacja]


Jeśli chodzi o paginację to działa mi dobrze, problem polega na tym iż zapytanie:
  1. $sql1 = "SELECT book.id_book, book.imie_nazwisko, book.start_pol, shot.animals, shot.ilosc, shot.ilosc_shot, shot.login
  2. FROM book LEFT JOIN shot ON $tabela.id_book=$tabela1.id_book";

powinno łączyć pola o tym samym Id_book z dwóch tabel a łączy mi po nr rekordów z tabeli - jeśli na pierwszej stronie mam 15 rekordów w tabeli a doklejone są w 1 i 3 rekordzie to po przejściu do drógiej strony tabeli TE SAME doklejone rokordy są znów w 1 i 3 rekordzie i z tym nie mogę sobie poradzić. Może źle wcześniej to opisałem..
CuteOne
A GDZIE MAJĄ BYĆ DOKLEJANE?? chcesz podczepić shot o id 3 do book o id 9?? pomyśl chwilkę.. przeczytaj starannie to co napisałem w poprzednim poście zwłaszcza część o wpisaniu czegoś magicznego do zapytania.

ps. mała podpowiedź WHERE id > start and id<end
eurosoft
Cytat(CuteOne @ 8.11.2010, 08:46:43 ) *
A GDZIE MAJĄ BYĆ DOKLEJANE?? chcesz podczepić shot o id 3 do book o id 9?? pomyśl chwilkę.. przeczytaj starannie to co napisałem w poprzednim poście zwłaszcza część o wpisaniu czegoś magicznego do zapytania.

ps. mała podpowiedź WHERE id > start and id<end


Kurczę właśnie o to mi chodzi że nie chcę aby mi podczepiał ID_Shot 3 do ID_book 6 a właśnie tak sie zachowuje........
Czy paginacja ma coś wspólnego z porównywaniem rekordów po ich wewnętrznych ID?
Przepraszam, może to pytania trywialne, ale proszę o wyrozumiałość..

Cytat(eurosoft @ 5.11.2010, 11:39:16 ) *
Witam,
jestem raczkującym w temacie SQL, proszę o podpowiedź w jaki sposób mogę wyświetlić na ekranie dane z dwóch tabel w odpowiedniej kolejności kolumn.

Struktura baz wygląda tak:

- TABELA SHOT -
id_shot
id_book
animal
rodzaj_animal
ilosc
ilosc_shot

- TABELA BOOK -
id_book
imie
start
end

zapytanie powinno agregować następujący wynik:
book.id_book | book.imie | book.start | shot.animal | shot.rodzaj_animal | shot.ilosc

dziękuję za wyrozumiałość i podpoweiedź

Pozdrawiam
Marcin

OK, wszystko działa, ale mam jeszcze problem z tym if-em....
CuteOne
wrzuć tutaj kod, którym pobierasz i wyświetlasz dane [chodzi o pętle]
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.