php - mysql查询以获取用户没有订单的所有产品

标签 php mysql

我有一个 Products 表和一个 Orders 表,其定义方式使我可以执行如下 JOIN 查询,以返回特定用户订单为零的 Products。

此查询有效,但速度非常慢。

select * from products where id not in (select product_id from orders where user_id = 1)

问题是,如何更好更快地编写相同的查询?

最佳答案

不需要子查询:

SELECT p.product_id
FROM
   Products p 
   LEFT JOIN Order o ON p.product_id = o.product_id AND o.user_id = @UserId
WHERE
   o.order_id IS NULL -- or any other field that cannot be null on Order

编辑:为了提高性能,您可能还需要检查在 Order user_id 列和您的 id 上是否有索引(更有可能您在那里有它们,并且可能有聚簇索引,两者都值得检查)

关于php - mysql查询以获取用户没有订单的所有产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349931/

相关文章:

mysql - 具有连接表关系的事件管理

php - 一张表中可以添加两个同名字段吗?

php - 使用用户插入的特定ID从php mysql数据库检索图像

php - JQuery.ajax 和对象和 php 的空响应

php - 如何在不刷新文件 PHP 网页的情况下从数据库中刷新 1 个单个值

java - Php VS Java 同时上传多个文件

php 在 session 中保存对象

php - Codeigniter 查询 count() 连接三个表的评论总数

php - 在 WooCommerce 中为特定选择的付款方式添加折扣

php - 我的代码执行完成花费了太多时间