选择至少有一个参数传递数组的条目

时间:2013-11-04 14:31:19

标签: php mysql zend-framework

我一直在开发一个使用zend framework 1.2,MySql和google maps的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;

}

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

感谢您的时间

1 个答案:

答案 0 :(得分: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)