Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> porównywanie wierszy z tablicą
Papub
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
ghost1511
post
Post #2





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


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ć.



Ten post edytował ghost1511 21.01.2014, 14:09:32
Go to the top of the page
+Quote Post
Papub
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


  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.
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


http://stackoverflow.com/questions/907806/...in-where-clause
Go to the top of the page
+Quote Post
Papub
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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 ;


Ten post edytował Papub 21.01.2014, 17:29:28
Go to the top of the page
+Quote Post
sazian
post
Post #6





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


i w czym jest problem ?
Go to the top of the page
+Quote Post
Papub
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


problem z wpleceniem $tablica[t.id] do zapytania. To ma zwracać wartość za każdą zmianą t.id dla danego wiersza
Go to the top of the page
+Quote Post
sazian
post
Post #8





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


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
Go to the top of the page
+Quote Post
Papub
post
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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ą.
Go to the top of the page
+Quote Post
ghost1511
post
Post #10





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


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.
Go to the top of the page
+Quote Post
Papub
post
Post #11





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


Chyba jednak tego się nie da zrobić (IMG:style_emoticons/default/biggrin.gif)
  1. INNER JOIN ( SELECT id_tablica, wartosc_tablica
(IMG:style_emoticons/default/questionmark.gif) ?
Ja nie mam takiego czegoś. Ja mam tablicę jako zmienną lokalną więc SELECT odpada (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
phpion
post
Post #12





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
Papub
post
Post #13





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


Proste a nie wpadłem na to. Dzięki! Właśnie o to chodziło. Pozdrawiam
Go to the top of the page
+Quote Post
ghost1511
post
Post #14





Grupa: Zarejestrowani
Postów: 186
Pomógł: 18
Dołączył: 2.09.2010

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


Cytat(Papub @ 22.01.2014, 11:23:01 ) *
Chyba jednak tego się nie da zrobić (IMG:style_emoticons/default/biggrin.gif)
  1. INNER JOIN ( SELECT id_tablica, wartosc_tablica
(IMG:style_emoticons/default/questionmark.gif) ?
Ja nie mam takiego czegoś. Ja mam tablicę jako zmienną lokalną więc SELECT odpada (IMG:style_emoticons/default/smile.gif)


SELECT UNION należałoby wygenerować w php, ale sposób podany przez phpion też zadziała. I jest (chyba) lepszy.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 13:58