mysql:获取独特产品的更简单、更高效的查询
我想优化我的数据库查询,但我不知道如何做到这一点 我想得到一个商店的产品意见列表,按意见日期从最新到最老排序,但产品必须是独一无二的 例如,有3个用户:U1、U2、U3 该市有2家商店: S1与产品P11、P12、P13、P14 S2与产品P21、P22、P23、P24 用户添加了一些意见,最新的在顶部,最老的在底部:mysql:获取独特产品的更简单、更高效的查询,mysql,sql,database,query-optimization,Mysql,Sql,Database,Query Optimization,我想优化我的数据库查询,但我不知道如何做到这一点 我想得到一个商店的产品意见列表,按意见日期从最新到最老排序,但产品必须是独一无二的 例如,有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: P2
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
";
您可以尝试按产品id分组,也可以按产品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
我不知道您是否认为它更简单,并且忽略$addtosql,但您可以这样做
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
JOIN
(
SELECT product_id
, max(created_on) created_on
FROM app_products_opinion
WHERE show_on_list = 1
AND (added_by = 'M' OR status = 1)
GROUP
by product_ID
) x
ON a.created_on = x.created_on
AND a.product_id = x.product_id
AND a.show_on_list = 1
AND a.store_ID = 'N'
AND a.photo != ''
AND (a.added_by = 'Z' OR a.status = 1)