Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyswietlanie danych z dwoch polaczonych tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
x11100b
witam

mam dwie tabele ktore tworze tak:

  1. CREATE TABLE vc_t (id integer PRIMARY KEY NOT NULL AUTO_INCREMENT, txt text, tyt char(255), dat datetime, kat integer, pub BOOLEAN, email char(255))
  2. CREATE TABLE galerie (id integer PRIMARY KEY NOT NULL AUTO_INCREMENT, DATA DATE, id_tekstu integer NOT NULL, zdjecie mediumblob, mini blob , rozszerzenie char(4) ,wys integer, szer integer)


pierwsza to tabela zawierajaca teksty, druga zawiera zdjecia z ktorych kazde przypisane jest do pewnego tekstu.

chce pobrac teksty wraz z identyfikatorami zdjec ktore im odpowiadaja.

bez stronicowania robilem to tak, ze pobieralem teksty (sortowane wedlug ID) wraz z iloscia zdjec do danego tekstu. nastepnie pobieralem zdjecia z tabeli 'galerie' (posortowane wedlug id_tekstu), i nastepnie w petli wyswietlalem tekst, i w dodatkowej petli w petli wyswietlalem odpowiednia ilosc zdjec z drugiego zapytania.

teraz chce zrobic stronicowanie, ilosc zdjec do danego tekstu umiem pobrac - takim zapytaniem:
  1. (
  2. SELECT `vc_t`.`id` AS `id` , COUNT( `galerie`.`id` ) AS 'ilosc', `dat` , `tyt` , `txt`
  3. FROM `galerie` , `vc_t`
  4. WHERE `galerie`.`id_tekstu` = `vc_t`.`id`
  5. AND `pub` = '1'
  6. GROUP BY `vc_t`.`id`
  7. )
  8. UNION (
  9.  
  10. SELECT `vc_t`.`id` AS `id` , 0 AS 'ilosc', `dat` , `tyt` , `txt`
  11. FROM `vc_t`
  12. WHERE `vc_t`.`id` NOT
  13. IN (
  14.  
  15. SELECT `id_tekstu`
  16. FROM `galerie`
  17. )
  18. )
  19. ORDER BY `id` DESC
  20. LIMIT $vc_start, $vc_n


ale nie wiem jak pobrac kolejnym zapytaniem odpowiednio ustawione identyfikatory zdjec?

a moze ktos ma lepszy pomysl jak wyswietlic takie dane z dwoch polaczonych tabel, z uzyciem stronicowania?

pozdrawiam winksmiley.jpg




jeszcze chcialbym napisac, ze wymyslilem takie zapytanie:

  1. SELECT `id` FROM `galerie` WHERE `galerie`.`id_tekstu` IN (SELECT `id` FROM `vc_t` ORDER BY `id` DESC LIMIT 0, 5 ) ORDER BY `id_tekstu` DESC


jednak dostaje taki komunikat o bledzie:

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'



zrobilem to tak:

  1. SELECT `id`
  2. FROM `galerie`
  3. WHERE `galerie`.`id_tekstu` > (SELECT min( `id` ) FROM `vc_t` ORDER BY `id` DESC LIMIT 0 , 3) AND `galerie`.`id_tekstu` < (SELECT max( `id` ) FROM `vc_t` ORDER BY `id` DESC LIMIT 0 , 3)
  4. ORDER BY `galerie`.`id_tekstu` DESC


jesli ktos ma jakis inny moze lepszy pomysl to bede wdzieczny winksmiley.jpg

pozdrawiam
erix
Też miałem taki problem. ;]

A nie lepiej w Twoim przypadku skorzystać z left join...?
x11100b
a moglbys podac konkretne zapytanie?

chodzi o to by z tabeli "galerie" wydobyc pola "galerie"."id" z rekordow w ktorych pole "galerie"."id_tekstu" odpowiada "vc_t"."id" z tabeli "vc_t" ale tym ktore sa ograniczone limitem $vc_start , $vc_n

robie to tak:

  1. SELECT `id`
  2. FROM `galerie`
  3. WHERE `galerie`.`id_tekstu` >= (SELECT min( `t`.`id` ) FROM (SELECT `id` FROM `vc_t` ORDER BY `id` DESC LIMIT $vc_start , $vc_n) AS t)
  4. AND `galerie`.`id_tekstu` <= (SELECT max( `tt`.`id` ) FROM (SELECT `id` FROM `vc_t` ORDER BY `id` DESC LIMIT $vc_start , $vc_n) AS tt)
  5. ORDER BY `galerie`.`id_tekstu` DESC


mozesz pokazac prosciej / lepiej / szybciej z uzyciem LEFT JOIN?
thek
Zrób LEFT JOIN po polach jak proponuje poprzednik a jako ograniczenie zdjęć w warunku WHERE użyj BETWEEN smile.gif
Sam sobie słownie napisałeś zapytanie jesli się przyjrzysz winksmiley.jpg
"wydobyc pola "galerie"."id"
  1. SELECT galerie.id

z rekordow w ktorych pole "galerie"."id_tekstu" odpowiada "vc_t"."id" z tabeli "vc_t" (w zależności czy teksty są przypisane do galerii czy galeria do tekstów, może być LEFT lub RIGHT JOIN)
  1. FROM galerie LEFT JOIN vc_t ON galerie.id = vc_t.id

ale tym ktore sa ograniczone limitem $vc_start , $vc_n
  1. WHERE galerie.id BETWEEN vc_start AND vc_n

Mam nadzieję, że wiesz jak przesłać zmienne vc_start i vc_n do zapytania 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-2024 Invision Power Services, Inc.