Php 在Mysql中连接两个和查询
这是我当前的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-
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)