mysql - mysql:获取独特产品的更简单、更有效的查询
问题描述
我想优化我的数据库查询,但我不知道该怎么做。
我想获取商店的产品意见列表,按意见日期(从最新到最旧)排序,但产品必须是唯一的。
例如,有 3 个用户: U1、U2、U3。
市内有2家店:
- S1(带产品P11、P12、P13、P14)
- S2(带产品P21、P22、P23、P24)
用户添加了一些意见(最新的在顶部,最旧的在底部):
U1: P22
U1: P13
U2: P21
U3: P13
U2: P23
U1: P23
我想要实现的是:
U1: P22
U1: P13
U2: P21
U2: P23
我创建的查询很长而且有点复杂。我可以以某种方式简化它吗?
$sql_query = "
SELECT a.*
, b.name AS 'store_name'
, b.city AS 'store_city'
, c.name AS 'product_name'
FROM `app_products_opinion` AS a
JOIN `app_products_stores` AS b
ON a.store_ID = b.ID
JOIN `app_products` AS c
ON a.product_ID = c.ID
WHERE a.created_on IN
(
SELECT max(created_on) as created_on
FROM app_products_opinion
WHERE show_on_list='1' AND (added_by='".$_SESSION["CMSUserID"]."' OR status = '1')
GROUP by product_ID
ORDER by created_on DESC
)
AND a.show_on_list='1'
AND a.store_ID='".$id_store['ID']."' $addtosql
AND a.photo != ''
AND (a.added_by='".$_SESSION["CMSUserID"]."' OR a.status='1')
ORDER BY a.created_on DESC
";
解决方案
您可以尝试按 product_id 分组,也可以按 product_ID 和日期加入(简化代码)
SELECT a.user_id, a.product_ID
from app_products_opinion a
INNER JOIN (
SELECT product_ID, max(created_on) as created_on
FROM app_products_opinion
WHERE show_on_list='1' AND (added_by='".$_SESSION["CMSUserID"]."' OR status = '1')
GROUP by product_ID
ORDER by created_on DESC
) t on a.created_on = t.created_on
AND a.product_ID = t.product_ID
推荐阅读
- php - Laravel 5.8.* 来自本地服务器的验证邮件错误:swift_transportexception (554)
- reactjs - React-final 表单:提交的复选框只能选择一个?
- node.js - 有没有办法使用 API 或任何第三方模块/工具获取 Instagram 直接消息?
- python - 我尝试在 django 中制作一种动态形式,根据用户更改模板中的字段数。截图如下
- python-2.7 - Scipy Minimize:最小化一组数据的函数
- python - Keras - Replicating 1D tensor to create 3D tensor
- excel - 在一张图上创建 3 条线(命名范围)
- highcharts - 设置 yAxis 最大值后,某些数据标签未显示
- android - 当文件名包含特殊字符时,MediaPlayer 无法播放文件
- python - How to get the path to the image from the memory?