0

嗨,我有 2 个 mysql 表,如下所示:

项目

id item_name user_id
1    test1     1    
2    test2     1
3    test3     1
4    test4     1  

项目

id user_id items
1    1       1,3
2    1       2,4

如何编写可以返回项目中每个项目的连接查询?

project1 =>
    item1=>
      [id1] =>
      [name1] =>
    item3=>
      [id3] =>
      [name3] =>

谢谢。

更新项目表 在此处输入图像描述

项目表 在此处输入图像描述

4

2 回答 2

3

首先不要在你的数据库中存储分隔值的字符串。您正在使用通常维护和查询数据的方式来限制自己。规范化您的数据(在这种情况下,通过引入project_items带有project_iditem_id列的表)。从长远来看,它会带来巨大的回报。

同时,您可以使用FIND_IN_SET()加入您的表格

SELECT p.id project_id, p.user_id, i.id item_id, i.item_name 
   FROM project p LEFT JOIN items i
     ON FIND_IN_SET(i.id, p.items) > 0
    AND p.user_id = i.user_id
 ORDER BY p.id, i.id

输出:

| 项目 ID | USER_ID | 项目 ID | 项目名称 |
----------------------------------------------
| 1 | 1 | 1 | 测试1 |
| 1 | 1 | 3 | 测试3 |
| 2 | 1 | 2 | 测试2 |
| 2 | 1 | 4 | 测试4 |

这是SQLFiddle演示

更新:的值items不应包含空格。删除它们或REPLACE()像这样使用

    ON FIND_IN_SET(i.id, REPLACE(p.items, ' ', '')) > 0

这是SQLFiddle演示

于 2013-08-06T06:52:46.693 回答
0

你的方法不好。您必须在项目和项目之间创建一个关系表。在记录中包含后跟逗号的值列表不是一个好主意。

您应该创建一个名为的附加表关系:project_items

您可以使用以下句子从项目中检索项目

select project_items.id_project, items.item_name, items.user_id 
from project_items 
left join items on project_items.id_item = items.id

这是一个更好的方法

于 2013-08-06T06:54:40.610 回答