在Mysql中连接两个AND查询

时间:2014-02-14 12:43:03

标签: php mysql pdo

这是我目前的MySQL表:

Crop             ID  Price  DateUpdated             Area       Region
Onion            4   50     2014-02-05 21:42:26     Bulua      X
Onion            5   20     2014-02-05 21:42:26     Lapasan    X
Onion            14  34.4   2014-02-05 23:12:21     Cogon      X
Onion            15  54     2014-02-07 02:40:13     Cogon      X
Onion            15  84     2014-02-07 02:40:13     DMarket    XI

我希望使用最新的'Crops'及其对应的'Price'输出所有'Region'。 因此,包含具有最新价格的特定ProductRegion的条目是我所需要的。

假设:

$product = 'Onion';
$region = 'X';   

查询为:

$crop_multi = $db->query("SELECT Crop, Price, Area, Region  
                FROM crops cr WHERE TRIM(Crop) = '{$product}' 
                AND DateUpdated = (SELECT MAX(DateUpdated) FROM crops WHERE Crop = cr.Crop AND TRIM(Crop) = '{$product}' AND TRIM(Region) = '{$region}')");
$message = "Price of {$product} in markets of Region {$region}:<br>";

            foreach ($crop_multi->fetchAll(PDO::FETCH_OBJ) as $row) {
            $add = "P{$row->Price}/kilo in {$row->Area}<br>";
            $message .= $add;
                }
            echo $message;              

所需的输出是:

Price of Onion in markets of Region X:
P50/kilo in Bulua
P20/kilo in Lapasan
P54/kilo in Cogon
  • 但是,我上面的代码只输出一行(庄稼与 “{1}}中使用的”最新“价格,即使其他条目符合查询条件。
  • foreach 循环适用于我的问题的另一种语法,所以我不认为 这就是问题所在。
  • 我尝试将$ product更改为$ region,但它会输出多个条目,所以是尝试失败。

编辑:只是澄清一下,上面的代码是一段摘录。 我在查询phpmyadmin query function

时遇到问题

3 个答案:

答案 0 :(得分:0)

这是你要找的吗?

    "SELECT Crop, Price, Area, Region  
    FROM crops cr WHERE TRIM(Crop) = ".$product." 
    AND DateUpdated = (SELECT MAX(DateUpdated) FROM crops WHERE Crop = cr.Crop AND TRIM(Crop) = ".$product." AND TRIM(Region) = ".$region."')"

答案 1 :(得分:0)

你可以试试这个。

SELECT DISTINCT Crop, Price, Area, Region FROM crops  tb1
WHERE DateUpdated = (SELECT MAX(DateUpdated) FROM crops tb2 WHERE tb1.Crop = tb2.Crop AND tb1.Area = tb2.Area AND tb1.Region = tb2.Region)
AND TRIM(Crop) = '{$product}' AND TRIM(Region) = '{$region}'; 

答案 2 :(得分:0)

尝试类似:

SELECT Crop, Price, Area, Region
FROM crops cr WHERE TRIM(Crop) = '{$product}'
AND TRIM(Region) = '{$region}'
AND DateUpdated IN(SELECT MAX(DateUpdated) FROM crops WHERE Crop = cr.Crop AND TRIM(Crop) = '{$product}' GROUP BY Crop, Area)

干杯