MySQL - 如何从不同的表中订购行?

时间:2014-10-20 11:01:55

标签: mysql

想象一下,我有一个包含四个表格的数据库:' shopping_list','糖果',#39;书籍'衣服'

用户可以在购物清单中添加任意数量的任何商品,并在提交之前重新排列订单。我试图找出按照提交顺序存储信息的最佳方式,这样我以后就可以轻松/有效地在屏幕上显示这些信息。

目前,物品表(糖果,书籍,衣服)存储了shopping_list ID和一个订单位置,当我遍历每个shopping_list项目并将其插入相关表格时,该位置会递增。

项目表具有与项目特定字段完全不同的结构。

所以我最终会得到类似的东西:

和shopping_list

ID: 1  UserId:123

甜食

ID: 1  ListId: 1  Order: 1  Flavour: 'Strawberry'  Colour: 'Red'
ID: 2  ListId: 1  Order: 4  Flavour: 'Cola'        Colour: 'Brown'

ID: 1  ListId: 1  Order: 3  Name: 'MySQL for Dummies' Author: 'Joe Bloggs'

ID: 1  ListId: 1  Order: 2  Type: 'Hat'  Size: 'Large'

到目前为止,我发现以正确的顺序选择此数据的唯一方法是从项目表中选择UNION三个SELECTS,并按照常用的顺序排序。字段,但每个表中的唯一字段(每个表15-20),我每次都必须选择很多NULL字段来匹配列数。

即。

SELECT Id, Order, Flavour, Colour, NULL, NULL, NULL, NULL FROM sweets WHERE ListId=1
UNION
SELECT Id, Order, NULL, NULL, Name, Author, NULL, NULL FROM books WHERE ListId=1
UNION
SELECT Id, Order, NULL, NULL, NULL, NULL, Type, Size FROM clothes WHERE ListId=1
ORDER BY Order

这显然是一个较小的例子....为了使我的实际表工作,我必须在每个选择上写入约20次NULL。我完全错误地采取了这种方式吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你可能错了,是的。您应该有一个额外的表,其中包含购物清单上的商品位置以及一个字段,该字段表示存储该字段的额外信息的位置。这将让您按顺序查询事物,然后从其他表中选择其他信息(如果需要)。

现在,您已将3个不同表格中的信息分散在一起,这就是您在排序时遇到问题的原因。