繁体   English   中英

MySQL-如何从不同的表排序行?

[英]MySQL - How to order rows from different tables?

想象一下,我有一个包含四个表的数据库:“ shopping_list”,“ sweets”,“ books”,“ clothes”

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

当前,项目表(甜品,书籍,衣服)存储shopping_list ID和一个订单位置,当我循环浏览每个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'

到目前为止,我发现以正确的顺序选择此数据的唯一方法是从项目表中联合三个SELECTS并按公共“ Order”字段进行ORDER BY,但每个表中都有唯一的字段(每个表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

显然,这是一个较小的示例。...为了使它在我的实际表上起作用,我必须在每个选择上写入NULL约20次。 我会完全以错误的方式去做吗?

在此先感谢您的帮助。

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

现在,您已经将信息分散在3个不同的表中,这就是为什么在正确排序信息时遇到问题的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM