Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Mysql中连接两个和查询_Php_Mysql_Pdo - Fatal编程技术网

Php 在Mysql中连接两个和查询

Php 在Mysql中连接两个和查询,php,mysql,pdo,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-

这是我当前的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'
。 因此,我需要的是包含特定
产品
地区
及其最新价格的条目

假设:

$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;              
  • 但是,我上面的代码只输出一行(使用 在
    phpmyadmin查询功能中使用时,即使其他条目满足查询条件,也应使用“最新”价格
    
  • 弗雷奇 循环在我的问题上使用另一种语法很好,所以我认为 这就是问题所在
  • 我曾尝试将$product更改为$region,但它却输出多个条目,因此是的,这是一次失败的尝试
编辑:只是澄清一下,上面的代码是摘录。
我在查询
$crop\u multi

时遇到问题,这就是您要找的吗

    "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."')"
你可以试试这个

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}'; 
尝试以下方法:

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)

干杯

我可以看到您代码中的语法错误。如果
,没有
的零件怎么办。您能发布完整的工作代码吗?@Rikesh:这是一段摘录,很抱歉,只是Mysql修复程序就可以了:)我们需要“$crop\u multi=$db->query(…)之后的内容来帮助您。您的代码可能只显示一个结果。@davidstrachan:我已将其还原为原始版本,上次对其进行了编辑,这样就不会将其误认为是PHP问题,而是Mysql查询问题。很抱歉。按作物和地区分组,然后按日期更新订单,限制为1如何?是的,但是您发送给我的代码与我在问题中的代码类似:(请澄清查询返回的内容,以及您希望返回的内容。我需要产品和地区及其最新价格。在phpmyadmin中使用上述查询时,即使有其他符合条件的条目,也只输出一行。代码有效,先生。如果您有时间,请您解释一下您使用的子查询?I h我还没有完全理解这种类型的语法,以避免将来的事故,也适用于有相同问题的人。:)当然!我的子查询找到最后一个日期
MAX(DateUpdated)
加工两个表(别名tb1和tb2)的列,在本例中是相同的表:
tb1.Crop=tb2.Crop和tb1.Area=tb2.Area和tb1.Region=tb2.Region
它在我的fetchAll上给出了一个错误,先生。我把它放在WHERE子句之后,更改了“{$product}”和“{$Region}”,但仍然给出了相同的错误。
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)