Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: porównywanie wierszy z tablicą
Forum PHP.pl > Forum > Bazy danych
Papub
Witam, mam tabelę id | wartosc i tablicę id | wartosc. Czy jest możliwość sprawdzania po kolei czy dany wiersz w tabeli ma mniejszą wartość od tego co się znajduje w tablicy? Do tej pory wyciągałem wiersze używając IN (1,2,3,4) teraz potrzebowałbym porównać aktualnie analizowany id z wartościa tego id z tablicy. Z ciekawości się zastanawiam czy idzie to zrobić jednym zapytaniem sql czy po prostu muszę najpierw pobrać wszystkie wiersze a następnie porównywać je z tablicą. Pozdrawiam
ghost1511
Czy Ty próbujesz znaleźć tylko te rekordy które mają różne wartości? Opisz dokładniej ten problem.

EDIT:
Opisz też skalę problemu. Mam pewien pomysł ale przy dużej bazie może nie działać.

Papub
  1. SELECT id, wartosc FROM tabela WHERE id IN (1,2,3,4,5);


do takiego zapytania chciałbym dodać dodatkowy warunek dla wartości. Mam je zepisane w tablicy
$tablica[1] = 30;
$tablica[2] = 30;
$tablica[3] = 20;
$tablica[4] = 10;
$tablica[5] = 50;

zapytanie ma wybierać tylko te wiersze w którch wartosc dla danego id jest mniejsza od tego co jest zapisane w tablicy dla danego id.
Papub
Nie widzę tam odpowiedzi na moje pytanie. Jest to samo co ja mam napisane wyżej.
Może napiszę brzydko coś co nie jest zapytaniem tylko jak to by miało wyglądać

  1. SELECT t.id, t.wartosc FROM tabela t WHERE t.id IN (1,2,3,4,5) AND $tablica[t.id] < t.wartosc ;
sazian
i w czym jest problem ?
Papub
problem z wpleceniem $tablica[t.id] do zapytania. To ma zwracać wartość za każdą zmianą t.id dla danego wiersza
sazian
co masz w tym $tablica[t.id]? wartość czy tablicę ?
jeśli wartość sam napisałeś odpowiedź powyżej,
jeśli jest to tablica to implode
Papub
w $tablica[x] jest wartość. Skoro zapytanie odbywa się w systemie bazy danych to jak może pobrać wartość zmiennej $tablica[t.id] skoro ta tablica jest zmienną lokalną.
ghost1511
Jeżeli dobrze zrozumiałem to chodzi Ci o to:
  1. SELECT id_tabela, wartosc_tabela FROM tabela
  2. INNER JOIN ( SELECT id_tablica, wartosc_tablica
  3. UNION SELECT id_tablica, wartosc_tablica
  4. UNION SELECT id_tablica, wartosc_tablica
  5. ) tablica
  6. WHERE tabela.wartosc_tabela>tablica.wartosc_tablica


Przy czym SELECT UNION generujesz dynamicznie.
Papub
Chyba jednak tego się nie da zrobić biggrin.gif
  1. INNER JOIN ( SELECT id_tablica, wartosc_tablica
questionmark.gif?
Ja nie mam takiego czegoś. Ja mam tablicę jako zmienną lokalną więc SELECT odpada smile.gif
phpion
Cytat(Papub @ 21.01.2014, 14:38:18 ) *
  1. SELECT id, wartosc FROM tabela WHERE id IN (1,2,3,4,5);


do takiego zapytania chciałbym dodać dodatkowy warunek dla wartości. Mam je zepisane w tablicy
$tablica[1] = 30;
$tablica[2] = 30;
$tablica[3] = 20;
$tablica[4] = 10;
$tablica[5] = 50;

zapytanie ma wybierać tylko te wiersze w którch wartosc dla danego id jest mniejsza od tego co jest zapisane w tablicy dla danego id.

  1. SELECT id, wartosc FROM tabela WHERE ((id = 1 AND wartosc < 30) OR (id = 2 AND wartosc < 30) OR (id = 3 AND wartosc < 20) OR (id = 4 AND wartosc < 10) OR (id = 5 AND wartosc < 50));

Te warunki musisz niestety wygenerować dynamicznie w PHP.
Papub
Proste a nie wpadłem na to. Dzięki! Właśnie o to chodziło. Pozdrawiam
ghost1511
Cytat(Papub @ 22.01.2014, 11:23:01 ) *
Chyba jednak tego się nie da zrobić biggrin.gif
  1. INNER JOIN ( SELECT id_tablica, wartosc_tablica
questionmark.gif?
Ja nie mam takiego czegoś. Ja mam tablicę jako zmienną lokalną więc SELECT odpada smile.gif


SELECT UNION należałoby wygenerować w php, ale sposób podany przez phpion też zadziała. I jest (chyba) lepszy.
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.