我正在构建一个弹出窗口,您可以在其中勾选复选框。选项和选项存储在mysql数据库中的多个关系中。
[ ] option A
[x] option B
[ ] option C
有3张桌子。 sphotos
,sphoto_feedback
和sphoto_has_feedbacks
。 sphoto_has_feedbacks存储sphoto_id,sphoto_feedback_id和user_id,以引用已提交投票的用户。
sphoto
id | status_id | ...
1 | ...
sphoto_feedback
id | name | ...
11 | Quality |
12 | Creative |
sphoto_has_feedbacks
id | sphoto_id | sphoto_feedback_id | user_id
1 | 1 | 11 | 9999
输入为user_id => 9999
和sphoto_id => 1
。所需的输出将是一个数组,它具有所有sphoto_feedback entrys,带有一个布尔变量,如下所示:
$output = [
"0" => [
"id" => 11,
"name" => "Quality",
"checked" => true
],
"1" => [
"id" => 12,
"name" => "Creative",
"checked" => false
]
]
看起来像这样:
[x] Quality <-- stored in sphoto_feedback, also stored in sphoto_has_feedbacks with reference to user
[ ] Creative <-- stored in sphoto_feedback
我想从数据库中检索所有选项,如果用户已经对选项投了票,请检查。
我知道如何在PHP中使用2个查询来完成它,但我想只使用一个查询,并想知道这是否可行。
答案 0 :(得分:1)
使用LEFT JOIN
加入sphoto_feedback
和sphoto_has_feedback
表,为第一个表中不匹配的所有行返回NULL
第二个表。
SELECT f.id, f.name, shf.id IS NOT NULL AS checked
FROM sphoto_feedback AS f
LEFT JOIN sphoto_has_feedback AS shf
ON f.id = shf.sphoto_feedback_id
AND shf.sphoto_id = 1 AND shf.user_id = 9999