使用外键以有序格式返回名称的MySQL查询

使用外键以有序格式返回名称的MySQL查询,mysql,sql,Mysql,Sql,我有一个与从两个表的组合中获取记录相关的查询,返回的结果将在外键的帮助下使用ORDERBY子句获取 我有两个名为users和orders的表 表格:用户 id name 1 John 2 Doe 表格:订单 id user_id for 1 2 cake 2 1 shake 2 2 milk 在table:orders中,user\u id是表示table:users中id的外键 问题: user_id

我有一个与从两个表的组合中获取记录相关的查询,返回的结果将在外键的帮助下使用ORDERBY子句获取

我有两个名为usersorders的表

表格:用户

id  name
1   John
2   Doe
表格:订单

id  user_id    for
1   2          cake
2   1          shake
2   2          milk
在table:orders中,user\u id是表示table:users中id的外键

问题:

user_id    for
2          cake
2          milk
1          shake
我想从table:orders中提取记录,但顺序应该基于用户名

期望的结果:

user_id    for
2          cake
2          milk
1          shake
注意:此处显示的用户id为2,显示在用户id为1之前。这是因为名称Doe应显示在名称John之前,因为order by

我现在所做的:

user_id    for
2          cake
2          milk
1          shake
我对MySQL连接一无所知。通过在互联网上搜索这件事,我没有找到一种方法来实现这件事。我已经写了一个查询,但它不会获取这样的记录,但不知道该怎么做才能使它完全像我想要的那样工作

SELECT * FROM orders ORDER BY user_id

它将根据用户id的顺序而不是名称来获取记录。

您是对的,连接两个表是实现这一点的最简单方法,您还可以显示名称,因为您已经连接了它们

用户_id |用于 ------: | :---- 2 |蛋糕 2 |牛奶 1 |摇晃
dbfiddle

您说得对,连接两个表是实现这一点的最简单方法,您还可以显示名称,因为您已经连接了它们

用户_id |用于 ------: | :---- 2 |蛋糕 2 |牛奶 1 |摇晃
dbfiddle

您只需使用下面的查询,就可以通过join orders表和users表获得所需的结果

SELECT user_id, for FROM orders, users where user_id = id ORDER BY name;
使用where条件,我们匹配orders表中
user\u id
等于users表中
id
的对应行。通过对用户表中的
name
列使用
orderby
,行将按升序排序。在这里,订单表中的
user\u id
列将显示为最终结果


这里我没有使用
users.id
orders.user\u id
,因为它们的格式不同。如果对列使用相同的格式,则需要使用上述语法。

只需使用下面的查询,就可以通过join orders表和users表获得所需的结果

SELECT user_id, for FROM orders, users where user_id = id ORDER BY name;
使用where条件,我们匹配orders表中
user\u id
等于users表中
id
的对应行。通过对用户表中的
name
列使用
orderby
,行将按升序排序。在这里,订单表中的
user\u id
列将显示为最终结果


这里我没有使用
users.id
orders.user\u id
,因为它们的格式不同。如果对列使用相同的格式,则需要使用上述语法。

Perfect Sir。如果我想提取所有列,那么我必须写o。mysql不喜欢两个表中的名称相同,通常人们只发布部分if there表,因此我不知道表是否有两个名称,所以我选择save-side并命名表的别名,此外,这使更复杂的查询更易于阅读。好的,先生。谢谢,太好了,先生。如果我想提取所有列,那么我必须写o。mysql不喜欢两个表中的名称相同,通常人们只发布部分if there表,因此我不知道表是否有两个名称,所以我选择save-side并命名表的别名,此外,这使更复杂的查询更易于阅读。好的,先生。谢谢。逗号分隔的表不再使用了,它们是基本的交叉联接,以后必须过滤。谢谢@nbk我会研究一下。逗号分隔的表不再使用了,它们是基本的交叉联接,以后必须过滤。谢谢@nbk我会研究一下。