PHP循环记录非常慢

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)

我需要返回每个副本的数据:

Mar*_*c B 6

加入不起作用?非常值得怀疑:

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)