需要一定的Mysql查询选择

时间:2016-10-14 14:36:05

标签: php mysql

我目前有一个MYSQL查询如下:

SELECT * FROM quotenumberlogbob 
WHERE LEFT(`quotenumber`, 2) = '$year' 
AND revision = 0 
ORDER BY quotenumber DESC

$year是由PHP文件填充的变量。

表结构如下:

CREATE TABLE quotenumberlogbob(
    id INT(10) unsigned NOT NULL AUTO_INCREMENT,
    quoteNumber VARCHAR(255),
    date VARCHAR(255),
    buildingType VARCHAR(255),
    Amount VARCHAR(255),
    contactName VARCHAR(255),
    repName VARCHAR(255),
    company VARCHAR(255),
    lengthft VARCHAR(255),
    widthft VARCHAR(255),
    heightft VARCHAR(255),
    revision VARCHAR(255),
    status VARCHAR(255) NOT NULL,
    lengthin VARCHAR(255),
    widthin VARCHAR(255),
    heightin VARCHAR(255),
    year VARCHAR(255),
    CONSTRAINT `PRIMARY` PRIMARY KEY (id, status)
);

我想要完成的只是为每个“数字”显示最高的“修订版”。

示例表可能是:

| ID    | quotenumber | revision | contactName | Price | Etc |
|-------|-------------|----------|-------------|-------|-----|
| 135   | 1609-4568   | 0        | Joe         | $1350 |     |
| 136   | 1609-4568   | 1        | Joe         | $1900 |     |
| 137   | 1609-4568   | 2        | Joe         | $2650 |     |
| 138   | 1609-4569   | 0        | Mike        | $1500 |     |
| 139   | 1609-4570   | 0        | Steve       | $1600 |     |
| 140   | 1609-4570   | 1        | Steve       | $1900 |     |
| 141   | 1609-4571   | 0        | Zack        | $1590 |     |
| 142   | 1609-4572   | 0        | Bob         | $6050 |     |

我想看到的是:

| ID    | quotenumber | revision | contactName | Price | Etc |
|-------|-------------|----------|-------------|-------|-----|
| 137   | 1609-4568   | 2        | Joe         | $2650 |     |
| 138   | 1609-4569   | 0        | Mike        | $1500 |     |
| 140   | 1609-4570   | 1        | Steve       | $1900 |     |
| 141   | 1609-4571   | 0        | Zack        | $1590 |     |
| 142   | 1609-4572   | 0        | Bob         | $6050 |     |

有些事情:

SELECT * FROM quotenumberlogbob 
WHERE LEFT(`quotenumber`, 2) = '$year' 
AND revision = max(revision)
ORDER BY quotenumber DESC

但显然这不起作用。

我知道我可以使用PHP循环基本上执行以下操作,但我试图避免这种情况:

SELECT DISTINCT quotenumber
FOR EACH quotenumber
SELECT max(revision) WHERE quotenumber = $quoteNumberFromAbove
SELECT * FROM table WHERE quotenumber  = $quoteNumber AND revision = $revision

我觉得这一切都可以一次完成,但我没有足够的经验知道如何。

如果有简单的方法,请告诉我。

编辑:迈克提供了我的问题的答案,但我觉得在这里也可以添加。

需要的查询是:

SELECT *
  FROM quotenumberlogbob 
  WHERE (quotenumber,revision)
       IN(
          SELECT quotenumber, max(revision)
            FROM quotenumberlogbob 
           WHERE LEFT(`quotenumber`, 2) = '$year' 
           GROUP BY quotenumber
         )
 ORDER BY quotenumber DESC

2 个答案:

答案 0 :(得分:1)

SELECT *
  FROM quotenumberlogbob 
 WHERE (quotenumber,revision)
       IN(
          SELECT quotenumber, max(revision)
            FROM quotenumberlogbob 
           WHERE LEFT(`quotenumber`, 2) = '$year' 
           GROUP BY quotenumber
         )
 ORDER BY quotenumber DESC

答案 1 :(得分:0)

keyup