gpt4 book ai didi

mysql - 查询多对多关系(如果为空也返回)

转载 作者:行者123 更新时间:2023-11-29 12:06:27 25 4
gpt4 key购买 nike

我正在构建一个弹出窗口,您可以在其中勾选复选框。选项和选择以多对多关系存储在 mysql 数据库内。

[ ] option A
[x] option B
[ ] option C

有3张 table 。 sphotossphoto_feedbacksphoto_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 => 9999sphoto_id => 1。所需的输出将是一个数组,其中包含所有 sphoto_feedback 条目,并带有一个 bool 变量,如下所示:

$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 个查询来完成此操作,但我只想使用一个查询,并且想知道这是否可行。

最佳答案

使用LEFT JOIN连接sphoto_feedbacksphoto_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

关于mysql - 查询多对多关系(如果为空也返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com