2013-04-21 73 views
0

我有表的样本数据是测试如何从PHP的其他类别获取一个值?

name | catid | date 
------------ 
abc | 1 
def | 2 
ghi | 1 
jkl | 2 
mno | 1 
pqr | 3 

而且我的查询

SELECT * FROM test WHERE catid = 1 AND catid = 2 AND catid = 3 ORDER BY date DESC 

如何获得与结果值

name | catid 
    ------------ 
    abc | 1 
    def | 2 
    pqr | 3 

回答

2
SELECT a.* 
FROM TableName a 
     INNER JOIN 
     (
      SELECT catid, MAX(DATE) max_date 
      FROM tableName 
      GROUP BY catID 
     ) b ON a.catID = b.catID AND 
       a.date = b.max_date 
+0

子查询减慢系统。在给定的情况下这不是必需的。 @Royal Bg的回答看起来很完美。 – 2013-04-21 15:34:53

+0

@MurtazaHussain如果用户想要列出所有'catID'并且存在多于qoo'catid',该怎么办?看到OP的order by子句:'ORDER BY date DESC'我想他想为每个'catID'获取最新的名字。如果你执行他的查询,它不会给你相同的名字,因为它会随机选择它,特别是如果你有大型数据库。看到这[MySQL扩展到GROUP BY](http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html) – 2013-04-21 15:36:47

+0

嗯,你是对的。但问题是“如何从其他类别获取一个价值”。所以。 – 2013-04-21 15:38:57

1
SELECT name, catid FROM test WHERE catid IN (1, 2, 3) GROUP BY catid 

我想你需要IN运算符这比CATID = x或CATID simplier ...(你需要OR,NOT AND)

0

根据您所需的输出,这可能是查询:

select catid, min(name) 
from yourtable 
where catid between 1 and 3 
group by catid 

但很难知道什么你想根据你的问题提供的信息。

相关问题