如何在PDO中编写此查询?

时间:2015-09-30 16:08:24

标签: php mysql pdo

我使用了mysql_query()mysql_connect()的查询,现在我在php中使用PDO

请帮助我,这个查询的最佳和最快方法是什么:

我的旧查询是:

$sql = "SELECT * FROM products WHERE publish = '1' 
    AND id IN 
        (SELECT product_id FROM category_controller WHERE category_id IN 
                (SELECT id FROM categories WHERE publish = '1'))";
$result = mysql_query($sql);

我的新查询是:

$PDO = new PDO("mysql:host=localhost;dbname=mydb", 'root', '');
$sql = "SELECT * FROM products WHERE publish = '1' 
    AND id IN 
        (SELECT product_id FROM category_controller WHERE category_id IN 
                (SELECT id FROM categories WHERE publish = '1'))";

$result = $PDO->query($sql);

但我使用的两种方式都非常缓慢,因为products表中有超过5000条记录。

请帮助我找到一种新的,最快的方式来运行此查询。

2 个答案:

答案 0 :(得分:0)

PDO并没有提高你的速度,正如我在这个硬查询中看到的那样。 如果需要提高速度,则需要按部件分解查询。 例如: 第一个查询将获取您的类别中的所有ID,并生成ID数组。 2查询将从cateogry_controller获取所有product_id使用先前查询{id}中的id数组

然后为产品做同样的事情

答案 1 :(得分:0)

您可以使用JOIN概念而不是像这样的所有子查询来加快速度。

SELECT p.* 
FROM products p
   JOIN category_controller cc ON cc.category_id = c.id
   JOIN categories c ON c.publish = 1
WHERE p.publish = 1