我有一个包含2个表的数据库,如下所示:
分类
Name | Items
---------------------------------
At Home | 3,4,8,9
At Office | 10,3,2,1
项
Name | id
--------------------------------
Fix Car | 3
Mow Lawn | 4
Garbage | 8
Laundry | 9
Desk Clean | 10
在“分类表”中,逗号分隔的数字表示按ID列出的项目。
如何选择选择特定类别中所有项目的SQL Select(例如“在家”),然后按照与项目列相同的顺序对它们进行排序。
数据库已经过简化,希望能让问题更容易理解。
另外,如果你能想出一种更好的方法来组织这类应用程序的数据库,那将很有用。
自定义订单对于此项目至关重要
答案 0 :(得分:3)
如果可能,请创建第3个表格以规范化您的数据库,或者查看下面的编辑: - )
CATEGORIES
Name | id
---------------------------------
At Home | 1
At Office | 2
ITEMS
Name | id
--------------------------------
Fix Car | 3
Mow Lawn | 4
Garbage | 8
Laundry | 9
Desk Clean | 10
LINKS
cat_id | item_id
--------------------------------
1 | 3
1 | 4
1 | 8
1 | 9
2 | 10
2 etc.
然后去:
SELECT items.name
FROM items
LEFT JOIN links ON items.id = links.item_id
WHERE items.cat_id = 1
ORDER BY items.id
我刚刚意识到我的运作假设每items
个categories
都可以。如果你想要1项 - > 1个类别,不需要第三个表,只需向items
添加一个字段,另一个用于自定义排序:
项
Name | id | cat_id | order
-----------------------------------------
Fix Car | 3 | 1 | 1
Mow Lawn | 4 | 2 | 1
Kill Cat | 9 | 1 | 2
SELECT name
FROM items
WHERE cat_id = 1
ORDER BY order
答案 1 :(得分:0)
使用FIND_IN_SET
SELECT a.name, b.Name itemName
FROM categories a
INNER JOIN items b
ON FIND_IN_SET(b.id, a.items) > 0
更好地规范化表格以获得更好的性能。这样做的一个缺点是难以达到您的要求,例如。 ..按照与项目列
相同的顺序对它们进行排序