php - 多对多关系选择php表单中的复选框

标签 php mysql

我有 3 个表:包含对象的表 (A)、包含属性的表 (B) 和包含链接对象/属性的表(A.id、B.id)。问题是,当我需要编辑对象时,我需要将数据加载到表单中,包括复选框状态。我看到的可能的解决方案之一是从具有属性的表和具有对象的表中选择数据,然后使用嵌套循环写下复选框,其中主循环将生成复选框,子循环将遍历数组的选择,并将选中 id 匹配的复选框,但我认为必须有某种方法从表中选择数据。

数据示例:

A.id          B.id        C(A.id B.id)
1             1             1    1
2             2             1    2
              3             1    3
              4             1    4
              5

我想要得到的是:

B.id          A.id
1             1
2             1
3             1
4             1
5             NULL

因此索引为 1,2,3,4 的 B 项将被选中,索引为 5 的 B 项将被取消选中。我通过使用得到了这个

SELECT DISTINCT B.id,  A.id FROM B LEFT JOIN C ON B.id=C.id 
WHERE A.id=<object id to edit> OR A.id IS NULL GROUP BY B.id

它确实有效,但仅限于 A.id=1。有了 A.id=2 我就得到了

B.id          A.id
5             NULL

这对我来说意味着仅显示 id 为 5 的属性的一个未选中的复选框。 而不是像这样:

B.id          A.id
1             NULL
2             NULL
3             NULL
4             NULL
5             NULL

A.id=2。有什么方法可以实现这一点,或者我应该使用不同的逻辑?

最佳答案

您可以在连接条件中指定所需的 A.id,而不是使用 WHERE 子句。

SELECT DISTINCT B.id, C.a_id FROM B LEFT JOIN C ON B.id=C.b_id AND C.a_id=2 GROUP BY B.id

在这里尝试一下:http://sqlfiddle.com/#!2/68efa/13/0

关于php - 多对多关系选择php表单中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003490/

相关文章:

php - 拉拉维尔 6 : Problem with credentials for MySQL and e-mail on production server only

javascript - 如何使用 PHP 和 AJAX 从 MySQL 创建 JavaScript 变量?

php - 无法在数据库中更新和/或插入图像(显示它也有问题)

Php Json 获取多个对象

php - elasticsearch中 "union"的子查询

php - 在 PHP 中为 .ppt 和 .pptx 生成缩略图

mysql - 两个不同的表日期列应该相同,金额列应该不同,如何计算每月支出金额?

mysql - grails/mysql 时区更改

MySQL 选择在其列中具有相同值的数据

mysql - SQL如何按值选择最近的时间戳?