Mysql 查询以显示项目的顺序
我想得到一份不同的人吃的水果的清单Mysql 查询以显示项目的顺序,mysql,sql,Mysql,Sql,我想得到一份不同的人吃的水果的清单 +-----------+ ID Name +----+------+ 1 Paul 2 John 3 Nick +----+------+ Table: users +--------+--------+ userID Fruit +--------+--------+ 1 Apple 2 Peach 2 Orange 2
+-----------+
ID Name
+----+------+
1 Paul
2 John
3 Nick
+----+------+
Table: users
+--------+--------+
userID Fruit
+--------+--------+
1 Apple
2 Peach
2 Orange
2 Apple
3 Apple
3 Peach
+--------+--------+
Table: eats
现在我可以很容易地得到一份谁吃了什么的清单。但如果我想知道谁吃了什么水果?结果将是:
+--------+----------+
Name Fruit
+--------+----------+
John Orange
Nick Peach
+--------+----------+
Result
SELECT Name, Fruit FROM users, eats WHERE ID = userID ... ???
此查询应该联接表:
选择eats.Fruit,users.Name FROM eats,users WHERE users.ID=eats.userID
如果不对行进行显式排序,则无法依赖关系数据库中的行顺序,因为在表中删除和插入新记录时,返回行的顺序会有所不同。您需要有一个额外的列,比如sequence
,用于显式存储所消费水果的顺序。然后,用sequence=2
选择水果是很简单的,正如@lanzz指出的,你不能指望顺序。维护一个序列会很昂贵,但是假设您正在存储时间戳,并且按顺序返回行
使用一个变量来记住每个名称的行数。在观察同一个人时迭代变量,并在碰到新的人时重置它。然后只吐出具有所需序列的记录。(这还有一个额外的好处,即可以为n的任何值选择用户的第n行)
瞧
+------+--------+-------------+--------------------+------+
| Name | Fruit | seq_formula | @seen_name := name | seq |
+------+--------+-------------+--------------------+------+
| John | Orange | 2 | John | 2 |
| Nick | Peach | 2 | Nick | 2 |
+------+--------+-------------+--------------------+------+
您的关联性是错误的。您实际上只是在重复问题中已经包含的查询。@lanzz,问题中没有功能查询。。。只是一个不完整的部分查询。你在说什么??;]第二个代码块在其最后一行中具有与您相同的查询,但没有完全限定的列名(这实际上不是必需的,因为没有模棱两可的列名)。你的答案没有添加任何内容,你只需去掉省略号和问号(很明显,这不是要作为查询执行的一部分,而是表示询问者想知道还需要添加什么到查询中)漂亮,这正是我想要的。事实上,我的实际项目确实有一个时间戳来按正确的顺序获取行。感谢阿兰和其他加入讨论的人。
+------+--------+-------------+--------------------+------+
| Name | Fruit | seq_formula | @seen_name := name | seq |
+------+--------+-------------+--------------------+------+
| John | Orange | 2 | John | 2 |
| Nick | Peach | 2 | Nick | 2 |
+------+--------+-------------+--------------------+------+