在 SQL 中合并 2 个查询
Posted
技术标签:
【中文标题】在 SQL 中合并 2 个查询【英文标题】:merging 2 queries in SQL 【发布时间】:2020-02-06 05:17:58 【问题描述】:我的数据库中有 40k 条记录。我已经编写了 2 个 SQL 查询来获得一些结果!不幸的是,它需要很长时间才能运行并且服务器给出超时错误!
我是 SQL 新手,所以任何人都可以帮助我合并我的查询,以减少执行时间!
这是我的代码
$sql="SELECT Website, COUNT(*) FROM entry GROUP BY Website HAVING COUNT(*) = 2 ";
$run = mysql_query($sql);
while($row=mysql_fetch_array($run))
$Website = $row['Website'];
$sql2 = "SELECT * FROM entry where Website= '$Website' GROUP BY Address ";
$run2 = mysql_query($sql2);
while($row=mysql_fetch_array($run2))
$id = $row['id'];
$Website = $row['Website'];
$Name = $row['Name'];
$Address = $row['Address'];
$Country = $row['Country'];
$City = $row['City'];
建议我!
【问题讨论】:
您的代码易受 SQL 注入攻击。您应该使用准备好的语句。 【参考方案1】:在服务器端 (php) 上运行 SQL 查询时的一个关键规则是,您应该永远不要在循环内执行 SQL 查询。发生的情况是,对于循环的每次迭代,服务器都会连接并从数据库中获取数据。这增加了数据库上的输入输出操作,导致数据获取速度变慢,如果数据量很大,甚至可能导致服务器停机。
考虑使用正确的查询并从查询本身中整理出来,避免使用 PHP。
$sql2 = "SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) ";
别担心,这是每个人的学习方式。快乐编码!
【讨论】:
是的,但是当我在 Phpmyadmin 中运行它时出现错误 ---> 错误 SQL 查询:文档 SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) LIMIT 0, 25 MySQL 说:Documentation #2013 - Lost connection to MySQL server during query – 由于我不知道条目表中有什么,我可能无法提供正确的解决方案。但我想您必须尝试替换查询中的 * 并放置更准确的内容。这可以解决问题,甚至使查询更快。除非你真的想要所有的列,否则使用 * 不是一种专业的方法。【参考方案2】:您可以使用它。在 where 条件下使用。
$sql="SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) ";
$run = mysql_query($sql);
while($row=mysql_fetch_array($run))
$id = $row['id'];
$Website = $row['Website'];
$Name = $row['Name'];
$Address = $row['Address'];
$Country = $row['Country'];
$City = $row['City'];
【讨论】:
是的,但是当我在 Phpmyadmin 中运行它时出现错误 ---> 错误 SQL 查询:文档 SELECT * FROM entry where Website in (SELECT Website FROM entry GROUP BY Website HAVING COUNT(*) = 2) LIMIT 0, 25 MySQL 说:Documentation #2013 - Lost connection to MySQL server during query – –以上是关于在 SQL 中合并 2 个查询的主要内容,如果未能解决你的问题,请参考以下文章