gpt4 book ai didi

php - mysql sql语句太长?

转载 作者:行者123 更新时间:2023-11-29 02:26:10 28 4
gpt4 key购买 nike

背景信息我有两个版本应该是相同的逻辑。第一个有效,第二个给出部分结果。我有一个接收对象数组的函数。每个对象都有一个 object_id。对于数组中的每个对象,我想运行一个 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('<BR>temp array count:'.count($temparray) . "<BR>"); // 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语句是否更好?还是像我一样尝试合二为一?谢谢。

最佳答案

我不太清楚为什么结果会被删减(也许查询字符串太长?)。

你可以尝试这样的事情;你在哪里查询数据库?

public function getwidgetdetails($widgets)
{
// Init
$results = array();

// Parse Ids
$list_of_ids = array();
foreach ($widgets as $widget) {
if isset($widget['id']) {
$list_of_ids[] = $widget['id'];
}
}

// Load Data In Chunk
foreach (array_chunk($list_of_ids, 250) as $ids)
{
// Query Db
$query = $this->db->query(sprintf("select * from object where object_id IN (%s)",
implode(',', $ids)));

// Append Result
$results = array_merge($results, $query->result_array());
}

// Finished
return $results;
}

关于php - mysql sql语句太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284718/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com