【发布时间】:2017-11-22 06:42:12
【问题描述】:
使用 PHP 和 Sqlite3,我有一个查询,例如:
$firstquery = "SELECT id FROM mytable WHERE critera=........";
这可以给我从 1 到 1000 个 id 的任意位置,具体取决于条件。
然后我在我的页面上的多达 40 个其他 SQL 查询中使用这个发现集。都是变体,例如:
$secondquery = "SELECT name FROM nametable WHERE nametable.id IN (".$firstquery.")";
$thirdquery = "SELECT car FROM cartable WHERE cartable.id IN (".$firstquery.")";
现在,当我有很多并且丢失了这些 $second、$third...$thirtiethquery 时,页面开始变慢,我认为不断需要一遍又一遍地运行 $firstquery 并没有帮助。
有没有办法避免一遍又一遍地运行 $firstquery ?也许以某种方式存储结果? (我尝试将结果存储为字符串并将其保存在 WHERE 中,但如果有数千个 id,则该子句的参数过多)。
感谢您的任何想法! 麦克尼文
【问题讨论】:
-
我首先要问:其他表中没有相关的ID(作为外键)吗?无论如何,您可以从
firstquery构建一个以逗号分隔的 id 字符串,然后在 IN 子句中将此字符串与其他查询一起使用。这是避免重复firstquery查询的一种方法。但是,我确信可以完成其他处理“调整”,尽管我必须了解更多信息才能进行任何其他优化改进。 -
为什么不使用
JOIN并让每个查询运行一次而不添加 $firstquery?