SQL Select в няколко полета

heytar

Registered
Тъпо заглавие, но и не знам как да го допълня.

Идеята е да взема резултатите от 2 таблици като във 2-та ще търсим по няколко параметъра.
Ако искам да селекта няколко пъти във B.field_id полето трябва ли всеки път да е с нов JOIN цялата таблица?

Всички полета са точни и ако пусна да търси само за
PHP:
B.field_id = 258 AND B.value =  'Daily smoker'
извежда правилен резултат

[sql]SELECT U.ID
FROM wpxx_bp_xprofile_data B, wpxx_users U
WHERE B.user_id = U.ID
AND (
(B.field_id = 258 AND B.value = 'Daily smoker')
AND
(B.field_id = 9 AND B.value = 'Prefer not to say')
AND
(B.field_id = 2 AND B.value BETWEEN 18 AND 60)
)[/sql] [/sql]
 
Пробвай така:
(field_id = ... AND ...) OR (field_id = ... AND ...) OR (...)


[sql]SELECT U.ID
FROM wpxx_bp_xprofile_data B
INNER JOIN wpxx_users U ON B.user_id = U.ID
WHERE (B.field_id = 258 AND B.value = 'Daily smoker')
OR (B.field_id = 9 AND B.value = 'Prefer not to say')
OR (B.field_id = 2 AND B.value BETWEEN 18 AND 60)[/sql]

Използвай joins когато можеш :)
 
[sql]SELECT U.ID
FROM wpxx_bp_xprofile_data B
JOIN wpxx_users U ON B.user_id = U.ID
WHERE B.field_id in (2,9,258)
and ( (B.value in ( 'Prefer not to say', 'Daily smoker') OR (B.value BETWEEN 18 AND 60) ) [/sql]

Не съм го пробвал, може и да има някаква грешка. Не ми харесва в базата да има не еднотипни данни - говоря за 18-60 и типа на пушача.

Предполагам, че 18-60 са годините на хората които пушат. То тогава има нещо сбъркано с базата.

p.s. Внимавай с in в SQL. Всеки сървър има различни лиматации от към него. MySql можеше до 1 000 атрибута да приеме. Postgresql - можеш доста, но се забавя значително.
 
index каза:
[sql]SELECT U.ID
FROM wpxx_bp_xprofile_data B
JOIN wpxx_users U ON B.user_id = U.ID
WHERE B.field_id in (2,9,258)
and ( (B.value in ( 'Prefer not to say', 'Daily smoker') OR (B.value BETWEEN 18 AND 60) ) [/sql]

Не съм го пробвал, може и да има някаква грешка. Не ми харесва в базата да има не еднотипни данни - говоря за 18-60 и типа на пушача.

Предполагам, че 18-60 са годините на хората които пушат. То тогава има нещо сбъркано с базата.

p.s. Внимавай с in в SQL. Всеки сървър има различни лиматации от към него. MySql можеше до 1 000 атрибута да приеме. Postgresql - можеш доста, но се забавя значително.
Отново в стара тема?
 

Горе