背景信息 我有2个版本应该是什么样的逻辑。第一个是有效的,第二个是部分结果。 我有一个接收对象数组的函数。每个对象都有一个object_id。对于数组中的每个对象,我想运行一条sql语句以从数据库获取更多数据。mysql的sql语句太长了?
示例代码 在第一个示例中,我循环遍历所有对象并执行SQL语句。我从1574条记录开始,得到1574条结果。但是,当我尝试使用所有ID创建一个字符串,然后将其传递给SQL“IN”命令时,我只获得800个左右的结果。 下面是失败的代码的一部分:(我没有做剪切和粘贴代码...只是这里包括重点路段)
public function getwidgetdetails($widgets)
{
foreach $widgets as $widget {
if isset($widget['id']) {
$list_of_ids = $widget['id'] . ',' . $list_of_ids;
}
}
//remove the trailing comma
$list_of_ids = substr($list_of_ids, 0, -1);
$temparray = explode(",", $list_of_ids);
print('
temp array count:'.count($temparray) . "
"); // this correctly gives 1574
$sql = "select * from object where object_id IN(". $list_of_ids. ")";
$query = $this->db->query($sql);
$all_widget_data = $query->result_array();
print(count($all_widget_data)); -- this gives 800 + records.
}
什么我试过到目前为止
有趣的是,当我尝试通过命令行运行sql语句时,我无法粘贴完整的sql语句而没有切断它。我不知道命令行缓冲区有多大。
问题
是否有可能我的sql语句太长? 我所拥有的另一个问题是,就sql而言,更高效的是什么? 为每个对象运行单独的sql语句会更好吗?或者尝试像我一样把它合并成一个? 谢谢。
2014-01-22
dot