Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select tych samych wartosci przy roznych warunkach
Forum PHP.pl > Forum > Bazy danych > MySQL
misty
hej, tytul postu pewnie malo jasny, ale zaraz wyjasnie o co mi chodzi. mam tabele test_props ktora trzyma propertisy wartosci z tabeli test_gl.
test_props ma takie pola:

  1. id - PRIMARY KEY
  2. test_gl_id - FOREIGN KEY do tabeli test_gl
  3. name - nazwa properties
  4. value - wartosc properties


ja chcialabym miec takiego sql'a ktory bedzie mi wyciagl dane z tej tabeli na podstawie kilku wartosci properties. chcialabym aby to pytanie dzialalo na takiej zasadzie:

  1. SELECT *
  2. FROM test_props
  3. WHERE 1
  4. AND value = '337' WHERE name = 'name_1'
  5. AND value = 'jakas wartosc' WHERE name = 'name_2'



czyli aby wyciagnelo takie pozycje, dla ktorych value wynosi 337 gdy name = 'name_1' oraz 'jakas_wartosc' gdy name = 'name_2'

da sie to w jakis sposob zrobic?

pzdr

moze podam przyklad. zalozmy ze w tabeli test_props mamy po 3 wpisy odpowiednio dla test_gl_id = 1, 2 i 3:

dla test_gl_id =1 sa wpisy:
  1. name - 'name_1', value - 'value_1'
  2. name - 'name_2', value - 'value_2'
  3. name - 'name_3', value - 'value_3'


dla test_gl_id = 2 sa wpisy:
  1. name - 'name_1', value - 'value_1'
  2. name - 'name_22', value - 'value_22'
  3. name - 'name_3', value - 'value_33'


zas
dla test_gl_id =1 sa wpisy:
  1. name - 'name_1', value - 'value_1'
  2. name - 'name_2', value - 'value_2'
  3. name - 'name_3', value - 'value_3'



i ja chce miec teraz takiego selecta, ktory wyciagnie mi te test_gl_id dla ktorych value = 'value_1' gdy name = 'name_1' oraz dla ktorych value = 'value_3' podczas gdy name = 'name_3' - czyli powinno mi znalezc tet_gl_id 1 oraz 3
luckyps
O cos takiego Ci chodzi ?
  1. ... WHERE (value = '337' AND name = 'name_1') OR (value = 'jakas wartosc' AND name = 'name_2' )

misty
nie, bo takie zapytanie zwroci mi test_gl_id 1, 2 oraz 3 (bazuje na moim przykladzie wyzej, tak bedzie prosciej). bo bedzie spelione ze albo value = 'value_1' gdy name='name_1' albo value ='value_3' gdy name = 'name_3'

i w przypadku ktory podales test_gl_id = 2 tez sie zalapie bo spelni warunek ze value= 'value_1' gdy name = 'name_1'

a prawdilowymi wynikami powinno byc test_gl_id = 1 i 3, poniewaz tylko dla nich spelnione sa oba warunki (posiadaja value = 'value_1' przy name='name_1' i value = 'value_2' przy name = 'name_2')

mam nadz ze napisalam klarownie o co chodzi smile.gif
nospor
  1. SELECT t1.id FROM test_props t1
  2. FROM test_props t2 ON t1.test_gl_id=t2.test_gl_id
  3. WHERE
  4. t1.value = '337' AND t1.name = 'name_1' AND
  5. t2.value = 'jakas wartosc' AND t2.name = 'name_2'

misty
hmm, nie wiem czy sie tak daa, dostaje err:

  1. USE near 'FROM test_props t2 ON t1.test_gl_id=t2.test_gl_id WHERE t1.value = '337'
nospor
zamiast drugiego FROM miało być LEFT JOIN... no nie kopiuj bezmyślnie tongue.gif Wpadłaś w pułapkę, którą umyślnie zastawiłem wink.gif
misty
szczerze to chyba nie skumalam tego zapytania na poczatku i przyznam szczerze-nie wpadlabym na niego na pewno.

wielkie dzieki za pomoc!
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.