根据两个表中的数据从两个MySQL表和ORDER中获取数据

时间:2014-04-08 19:56:23

标签: php mysql

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

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”字样。订购

FIRST:按名称排序的成员ASC

THEN

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

2 个答案:

答案 0 :(得分:3)

您的联接查询不正确

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

答案 1 :(得分:1)

在查询中有三个表引用,至少需要为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