形式php中的多对多关系选择复选框

时间:2013-08-01 20:02:53

标签: 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项。我通过使用

得到了这个
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。有没有办法实现这一点,或者我应该使用不同的逻辑?

2 个答案:

答案 0 :(得分:0)

您可以在不使用CASE子句

的情况下使用WHERE
SELECT tableb.`id`,
(CASE WHEN tablec.`aid`=2 THEN tablec.`aid` ELSE NULL END ) AS test
 FROM tableb
LEFT JOIN tablec ON (tableb.`id` = tablec.`bid`) 

Fiddle for id=2

Fiddle for id=1

它会起作用,并为您提供具有匹配ID的所有条件的结果

答案 1 :(得分:0)

您可以在加入条件中指定所需的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