私はSQLクエリ、実際には単純なクエリに問題がありますが、何が欠けているのかわかりませんので、あなたの助けを求めるようになりました...だから、私がしなければならないこと
2つのテーブルrooms
とrooms facilities
...そして、私は希望の設備を備えた部屋を選択する必要があります。
1つの施設(id = 4の施設-id_fu-)がある部屋を選択した場合...次のクエリを使用して
SELECT u.* FROM rooms u
JOIN facilities_r fu
ON fu.id_uc = u.id_uc
AND fu.id_fu = '4'
WHERE 1
AND vizibility='1'
GROUP BY id_uc
ORDER BY u_premium desc, id_uc DESC
全部大丈夫。
しかし、より多くの施設がある部屋を選択したい場合は、次のクエリを使用して、id = 4、id = 3の施設としましょう。
SELECT u.* FROM room u
JOIN facilities_r fu
ON fu.id_uc=u.id_uc
AND fu.id_fu = '4'
AND fu.id_fu = '3'
WHERE 1
AND vizibility = '1'
GROUP BY id_uc
ORDER BY u_premium DESC, id_uc DESC
機能しません。
なぜ機能しないのか理解できませんが、条件の付け方がわかりません...
ありがとう、ミハイ
条件を括弧でグループ化できます。フィールドが別のフィールドと等しいかどうかを確認するときは、OR
を使用します。たとえば、WHERE a='1' AND (b='123' OR b='234')
。
SELECT u.*
FROM rooms AS u
JOIN facilities_r AS fu
ON fu.id_uc = u.id_uc AND (fu.id_fu='4' OR fu.id_fu='3')
WHERE vizibility='1'
GROUP BY id_uc
ORDER BY u_premium desc, id_uc desc
SELECT
u . *
FROM
room u
JOIN
facilities_r fu ON fu.id_uc = u.id_uc
AND (fu.id_fu = '4' OR fu.id_fu = '3')
WHERE
1 and vizibility = '1'
GROUP BY id_uc
ORDER BY u_premium desc , id_uc desc
ここでは、ANDではなく、ORを使用する必要があります。
Id_fuは、一度に4と3に等しくすることはできません。
ファシリティテーブルに2回参加すると、次のようになります。
select u.*
from room u
JOIN facilities_r fu1 on fu1.id_uc = u.id_uc and fu1.id_fu = '4'
JOIN facilities_r fu2 on fu2.id_uc = u.id_uc and fu2.id_fu = '3'
where 1 and vizibility='1'
group by id_uc
order by u_premium desc, id_uc desc