Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询以显示项目的顺序_Mysql_Sql - Fatal编程技术网

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 |
+------+--------+-------------+--------------------+------+