我一直在开发一个使用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;
}
但是,我想知道是否还有另一种方法只使用查询。
感谢您的时间
答案 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)