【问题标题】:Get data from two MySQL tables and ORDER based on the data from the two tables从两个 MySQL 表中获取数据,并根据这两个表中的数据进行 ORDER
【发布时间】:2014-04-08 19:56:23
【问题描述】:

我在尝试将两个表连接在一起然后返回按两个表中的列排序的结果时迷失了方向。这是我没有返回任何行的查询:

SELECT category.name,
       client.name,
       client.member
FROM   `category`,
       `client`
       INNER JOIN `client`
               ON client.name = category.name
WHERE  catdesc = '$info'
ORDER  BY client.member,
          category.name ASC  

我想用这个查询返回什么:

我想要一个具有特定 'catdesc' ORDERED 的名称列表(两个表的名称都相同)

FIRST:按名称 ASC 排序的成员

那么

SECOND:在成员之后,按名称 ASC 排序的非成员。

【问题讨论】:

  • 你为什么要加入client表2次?

标签: php mysql


【解决方案1】:

您的连接查询不正确

SELECT 
category.name, 
client.name, 
client.member 
FROM `category`,
`client` <----- here is the issue
INNER JOIN `client` ON client.name = category.name 
WHERE catdesc ='$info' 
ORDER BY client.member, category.name ASC

这应该是

SELECT 
category.name, 
client.name, 
client.member 
FROM `category`
INNER JOIN `client` ON client.name = category.name 
WHERE catdesc ='$info' 
ORDER BY client.member, category.name ASC

【讨论】:

  • 我在语句的 FROM 部分中删除了“client”,但它仍然没有返回任何行。在此之前,我只提取名称而不尝试按成员排序,因此此查询确实返回行:SELECT name FROM 'category' WHERE catdesc = '$info' ORDER BY name asc
  • 你可以回显查询并直接在 mysql 上尝试,看看你是否得到了什么?因为有一个条件WHERE catdesc ='$info' 并且由于它,如果没有找到匹配的数据,那么将返回 0 行并且在client.name = category.name 上完成了更多的连接,因此请确保连接表具有匹配的数据。
  • 或在 www.sqlfiddle.com 中发布带有一些数据的表格,以便我可以为您创建一个实时示例。
【解决方案2】:

您的查询中有三个表引用,至少需要为client 表的一个引用指定别名,否则,您将遇到“不明确的列”错误。

不要将老式的“逗号”连接运算符与 JOIN 关键字混用。最佳做法是限定所有列引用,即使它们没有歧义。

您当前的查询文本相当于:

SELECT category.name
     , client.name
     , client.member
  FROM `category`
  JOIN `client`
  JOIN `client` 
    ON client.name = category.name
 WHERE catdesc ='$info' 
ORDER BY client.member, category.name ASC

我们预计会引发错误。我们真的希望看到更多类似的东西:

SELECT category.name
     , client.name
     , client.member
  FROM `category`
  JOIN `client`
    ON client.name = category.name
 WHERE category.catdesc = '$info'
 ORDER
    BY client.member
     , category.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2014-02-18
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多