JamalBIG
23.06.2013, 14:23:56
Witam
Postaram się przedstawić problem możliwie zrozumiale, jeżeli coś będzie niezrozumiałe, dajcie znać;
Tabela 'parametry_przedmiotu':
|id|przedmiot_id|parametr_id|parametr_wartosc|
|--+--------------+-------------+--------------------|
|1 | 99 | 20 | biały |
|--+--------------+-------------+--------------------|
|2 | 99 | 21 | długi |
|--+--------------+-------------+--------------------|
|3 | 99 | 22 | szklany |
|--+--------------+-------------+--------------------|
|4 | 80 | 20 | biały |
|--+--------------+-------------+--------------------|
|5 | 79 | 22 | metalowy |
|--+--------------+-------------+--------------------|
Z powyższej tabeli potrzebuje wyszukać przedmioty z 'paramter_id' 20 i 21 oraz 'parametr_wartosc': biały i szaklany - (czyli powinienem otrzymać 'przedmiot_id': 99) stosowałem 'AND' i 'OR' ale nie zwracają pożądanego rezultatu;
c1chy
23.06.2013, 15:16:04
SELECT przedmiot_id FROM parametry_przedmiotu WHERE parametr_id IN(20,21) AND parametr_wartosc IN ('bialy','szklany');
JamalBIG
23.06.2013, 19:22:09
A w jaki sposób wyszukać dodatkowo przedział gdy 'parametr_wartosc' wynosił by np. 8 (można jakoś umieścić przedział w IN?)
c1chy
23.06.2013, 19:35:28
Tak po przecinku umieszczasz wartości jakie mają zostać dopasowane
JamalBIG
23.06.2013, 20:49:17
Możesz mi podać przykład takiego przedziału w IN?
c1chy
23.06.2013, 21:03:40
po prostu po przecinku dodajesz kolejne opcje które chcesz dopasować np:
WHERE parametr_wartosc IN ('bialy','szklany',8)
JamalBIG
24.06.2013, 10:29:38
Ale chodzi mi o przedział czyli jeżeli nie znam konkretnej liczby tylko przedział np. 4 a 10
c1chy
24.06.2013, 12:54:59
do przedziałów masz
BETWEEN
JamalBIG
24.06.2013, 18:06:09
Wiem, że używa się BETWEEN ale przy jego użyciu wyciągnę jeden rekord a co jeżeli tabela wygląda następująco:
|id|przedmiot_id|parametr_id|parametr_wartosc|
|--+--------------+-------------+--------------------|
|1 | 99 | 20 | biały |
|--+--------------+-------------+--------------------|
|2 | 99 | 21 | długi |
|--+--------------+-------------+--------------------|
|3 | 99 | 22 | szklany |
|--+--------------+-------------+--------------------|
|4 | 80 | 20 | biały |
|--+--------------+-------------+--------------------|
|5 | 79 | 22 | 8|
|--+--------------+-------------+--------------------|
|6 | 79 | 20 | 7|
|--+--------------+-------------+--------------------|
|7 | 79 | 21 | 6|
|--+--------------+-------------+--------------------|
|8 | 79 | 22 | 5|
|--+--------------+-------------+--------------------|
I chcę wyciągnąć rekordy z 'parametr_wartosc': biały, szklany oraz z liczbą między 5 a 7 - biały i szklany wrzucę w IN a przedział?
c1chy
24.06.2013, 18:31:53
możesz to zrobić na kilka sposobów akurat przedział 5-7 nie jest duży ale załóżmy że byłby większy można np tak:
WHERE parametr_wartosc IN('bialy','szklany') OR parametr_wartosc BETWEEN 5 AND 7
Generalnie musisz poćwiczyć łączenie warunków i wszystko wtedy wyda się jasne.
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.