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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
SQL语句与PHP-从每个供应商中选择最新添加的行_Php_Mysql_Sql_Select - Fatal编程技术网

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

SQL语句与PHP-从每个供应商中选择最新添加的行,php,mysql,sql,select,Php,Mysql,Sql,Select,这个问题可能很容易解决,但它来了 我想从每个供应商那里获得最新的数据(每个供应商的最新行插入到数据库中) 以下是MySQL中的一些示例数据: id vendorId vendor url delay price0 price1 price2 price3 price4 price5 price6 date 1 1 vendor1 vendor1.com 0 12 15 1

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

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

以下是MySQL中的一些示例数据:

id vendorId vendor url delay price0 price1 price2 price3 price4 price5 price6 date 1 1 vendor1 vendor1.com 0 12 15 18 14 25 28 25 2012-01-18 09:43:40 2 2 vendor2 vendor2.com 0 12 15 18 14 25 28 25 2012-01-18 09:43:40 3 1 vendor1 vendor1.com 0 15 17 122 12 30 52 53 2012-01-18 10:02:40 4 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日期 1供应商1供应商1.com 0 12 15 18 14 25 25 2012-01-18 09:43:40 2 vendor2 vendor2.com 0 12 15 18 14 25 25 2012-01-18 09:43:40 3 1 vendor1 vendor1.com 0 15 17 122 12 30 52 53 2012-01-18 10:02:40 4供应商2供应商2.com 0 13 12 123 16 54 61 91 2012-01-18 10:02:40 我希望输出为:

id vendorId vendor url delay price0 price1 price2 price3 price4 price5 price6 date 3 1 vendor1 vendor1.com 0 15 17 122 12 30 52 53 2012-01-18 10:02:40 4 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:40 4供应商2供应商2.com 0 13 12 123 16 54 61 91 2012-01-18 10:02:40 SQL是什么,我如何将值放入这个数组

$vendor = array( array('vendorId' => '1', 'vendor' => 'vendor1', 'url' => 'vendor1', 'delay' => 0, 'price0' => 12, 'price1' => 15, 'price2' => 26, 'price3' => 14, 'price4' => 25, 'price5' => 64, 'price6' => 512), array('vendorId' => '2', 'vendor' => 'vendor2', 'url' => 'vendor2', 'delay' => 0, 'price0' => 12, 'price1' => 15, 'price2' => 26, 'price3' => 14, 'price4' => 25, 'price5' => 64, 'price6' => 512) ); $vendor=array( 数组('vendorId'=>'1'、'vendor1'=>'vendor1'、'url'=>'vendor1'、'delay'=>0'、price0'=>12、'price1'=>15、'price2'=>26、'price3'=>14、'price4'=>25、'price5'=>64、'price6'=>512), 数组('vendorId'=>'2','vendor2','url'=>'vendor2','delay'=>0',price0'=>12',price1'=>15',price2'=>26',price3'=>14',price4'=>25',price5'=>64',price6'=>512) ); 提前谢谢

另外,我忘了提到:数据库中的供应商不止两个,所以我更希望每辆车都能找到它们。

试试这个查询-

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 * FROM vendor_table_name ORDER BY date DESC
对于数组

$result =  (query result)

foreach($result as $r){
     $array = array("name" => $r->name, .....);
}
您更新了问题,说明了如何将结果集获取到数组中。 请参阅:


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

不确定语法是否正确,但我大致上就是这样做的

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

这将只返回按日期排序的信息,但不会仅过滤每个供应商的最新记录。非常感谢。我得到了我想要的所有值,但在将供应商添加到我自己的多维数组时仍然感到困惑。我是在($r=mysql\u fetch\u array($result)){}从那里将数组添加到供应商数组中同样简单,只需在花括号内添加以下内容{}:$vendor\u array[]=$r;但有一件事是,sql似乎是首先选择添加的行,而不是最新添加的行。有什么建议吗?此SQL语句在某些情况下可能会起作用,但它在很大程度上取决于数据库中记录的顺序,因为prices字段有不同的值。基本上,数据库可能会随机选择要返回的记录。如果压缩数据库,返回的记录可能会更改,或者以某种方式更改数据库中记录的物理排序顺序。谢谢您的回答。我的mysql查询在您的示例中会是什么样子?
  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