0

我一直在使用 zend 框架 1.2、MySql 和谷歌地图开发一个 Web 应用程序来动态创建一些标记。为此,我有一个具有以下结构的表:

id      lat       long     name
----------------------------------------------------
1       12.4       20.5    myHotSpot

所以想象一个特殊的用户可以上传一个具有这种结构的 csv 来更新这个表中的坐标。但在此之前,我想检查哪些条目将被更新,以便用户确认此更改。

出于这个原因,我想要一个传递数组的查询返回将要更新的条目。

我知道我可以使用 foreach 或 while 等,并以这种方式使用查询:

foreach($items as $item){

$sql = "SELECT * FROM markers where id = ? and 
((lat is null or lat != ?) or (long is null or long != ?))";

$result = $this->freqDb->fetchRow($sql, array($item->id, $item->lat, $item->long), Zend_Db::FETCH_OBJ);
if($result)
    $element[] = $item;

}

但是,我想知道是否有另一种只使用查询的方法。

谢谢你的时间

4

1 回答 1

1

你可以尝试这样的事情:

SELECT *
FROM markers 
WHERE CONCAT( `id` , ',', `lat` , ',', `log` , ';' ) 
NOT IN ('csv_file_line1', 'csv_file_line2');

这样,您将在 1 个查询中检查 csv 文件中的所有行。

编辑:那里缺少一个 where 子句:

AND `id` IN (IDs from csv file)
于 2013-11-05T10:54:28.803 回答