Gio*_*rgi 1 php mysql pdo loops query-optimization
我正在使用PDO.所以我有一个声明,准备一个查询来选择一堆记录.例:
//select duplicates
$stmt = $this->db->prepare('SELECT Name COUNT( * ) AS CNT
FROM `Test`
GROUP BY Name
HAVING CNT > 1');
$stmt2 = $this->db->prepare('SELECT * FROM Test2 WHERE TName = ?');
Run Code Online (Sandbox Code Playgroud)
请注意,我确实需要选择所有数据,而不是某些列.该表包含5k记录,有时甚至更多.我需要选择所有5k记录,对于每个记录,我需要执行另一个查询来选择其他内容.
$arr = array();
while ($row = $stmt->fetch(DB::FETCH_ASSOC)) {
$stmt2->execute($row['Name']);
$arr[] = $stmt2->fetchAll(DB::FETCH_ASSOC);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用连接但是对于我的情况连接将不起作用,因为我需要遍历数据并为每个stmt1行执行stmt2.
当我运行它需要10-15分钟,我不能允许,我需要它更快.谁能告诉我这是什么问题?5k记录似乎没有多少循环.
STMT1 returns up to 5.5k records
Run Code Online (Sandbox Code Playgroud)
我需要返回每个副本的数据:
加入不起作用?非常值得怀疑:
SELECT test2.*, count(test.name) AS cnt
FROM test
LEFT JOIN test2 ON test2.id = test.id
GROUP BY test.name
HAVING (cnt > 1)
Run Code Online (Sandbox Code Playgroud)
考虑到OP的麻烦,另一次尝试:
SELECT *
FROM test2
WHERE name IN (
SELECT DISTINCT name
FROM test
GROUP BY name
HAVING (count(*) > 1)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |