使用PHP的SQL语句-从每个供应商中选择最新添加的行


SQL statement with PHP - Select the latest added row from each vendor

这个问题可能很容易解决,但它来了。

我想从每个供应商那里获得最新的数据(每个供应商的数据库中插入的最新一行)。

这是MySQL的一些示例数据:

id供应商id供应商url延迟价格0价格1价格2价格3价格4价格5价格6日期1 1 vendor1 vendor1.com 0 12 15 18 14 25 28 25 2012-01-18 09:43:402 vendor2 vendor2.com 0 12 15 18 14 25 28 25 2012-01-18 09:43:403 1 vendor1 vendor1.com 0 15 17 122 12 30 52 53 2012-01-18 10:02:404 2 vendor2 vendor2.com 0 13 12 123 16 54 61 91 2012-01-18 10:02:40

我希望输出为:

id供应商id供应商url延迟价格0价格1价格2价格3价格4价格5价格6日期3 1 vendor1 vendor1.com 0 15 17 122 12 30 52 53 2012-01-18 10:02:404 2 vendor2 vendor2.com 0 13 12 123 16 54 61 91 2012-01-18 10:02:40

SQL是什么?我将如何将值放入这个数组?

$vendor=阵列(数组('vendorId'=>'1','vendor'=>'vendor1','url'=>'vendor1'、'delay'=>0、'price0'=>12、'pric1'=>15、'pric2'=>26、'pric3'=>14、'pric4'=>25、'pric5'=>64、'pric6'=>512),数组('vendorId'=>'2','vendor'=>'vendor2','Aurl'=>'vendor2'、'delay'=>0、'price0'=>12、'pric1'=>15、'pric2'=>26、'pric3'=>14、'pric4'=>25、'pric5'=>64、'pric6'=>512))

提前感谢

此外,我忘了提一下:数据库中将有不止2家供应商,所以我更希望每辆车都能找到他们。

SELECT max( id ) AS max_id, vendorId, url, delay, 
price0, price1, price2, price3, price4, price5, price6, date 
FROM `vendors` 
GROUP BY vendorId

您更新了您的问题,说明应如何将结果集获取到数组中。请参阅此处:http://php.net/manual/en/function.mysql-fetch-array.php

$row = mysql_fetch_array($result);

然后,您可以将每一行作为关联数组添加到另一个数组中,该数组包含所有供应商,可通过键/值访问。

尝试此查询-

SELECT v1.* FROM vendors v1
  JOIN (
    SELECT vendorId, MAX(date) date FROM vendors GROUP BY vendorId
  ) v2
ON v1.vendorId = v2.vendorId AND v1.date = v2.date

不确定语法是否正确,但我大致会这样做。

SELECT 
    `id`, `vendorId`, `vendor`, `url`, `delay`, `price0`, 
    `price1`, `price2`, `price3`, `price4`, `price5`, 
    `price6`, `date` 
FROM 
    `vendor_table_name` 
GROUP BY 
    `vendor_id` 
HAVING 
    `date` = max(`date`)

请尝试以下操作:

select * from vendor_table_name as ts 
left join 
(select max(id) as id from vendor_table_name group by vendorId) as tsm
on ts.id=tsm.id

然而,它有限制之后,它将是缓慢的大约50K-80K行

最好的方法是创建最新记录的视图,并与视图连接。

如下所示:

  create view latestrecords as 
  select max(id) as id,vendorId from vendor_table_name group by vendorId

并加入视图:

  select * from vendor_table_name as ts 
    left join 
    latestrecords  as tsm
    on ts.id=tsm.id

试试这个

SELECT * FROM vendor_table_name ORDER BY date DESC

对于阵列

$result =  (query result)
foreach($result as $r){
     $array = array("name" => $r->name, .....);
}