mysql - 如何查询mysql以按多个值进行选择和分组

标签 mysql

我正在尝试根据下表的所有 contentid 值进行选择和分组,其中匹配条件可以是多个不同的值。

contentid 值实际上代表汽车,所以我需要选择 [并分组依据] 所有 contentis,其中值为“GMC”,值为“sedan”,值为“automatic”。

即我正在尝试选择所有配备自动变速箱的 GMC 轿车。

这样的查询[显然]失败了:

select * from modx_site_tmplvar_contentvalues WHERE
`value` = 'gmc' and
`value` = 'tacoma'
group by contentid

我不知道如何创建这样的查询。有什么建议么?

table structure

最佳答案

您需要在“tmplvarid”上“透视”这些数据,但不幸的是,MySQL 没有像其他 RDBMS 那样的 PIVOT 语句。但是,您可以通过多次加入表中您关心的每个变量来自行调整它:

SELECT
    contents.contentid,
    transmission.value as transmission,
    type.value as type,
    make.value as make
FROM
    (SELECT DISTINCT contentid FROM modx_site_tmplvar_contentvalues) AS contents
LEFT JOIN
    modx_site_tmplvar_contentvalues AS transmission
        ON contents.contentid = transmission.contentid
        AND transmission.tmplvarid = 33 -- id for transmission
LEFT JOIN
    modx_site_tmplvar_contentvalues AS make
        ON contents.contentid = make.contentid
        AND make.tmplvarid = 13 -- id for make
LEFT JOIN
    modx_site_tmplvar_contentvalues AS type
        ON contents.contentid = type.contentid
        AND type.tmplvarid = 17 -- id for type
WHERE
    type.value = 'sedan'
    AND make.value = 'GMC'
    AND transmission.value = 'automatic'

您可以使用其他标准(例如年份(id 15)或里程(id 16))的附加连接来扩展它。

如果你只需要使用值,你可以尝试:

SELECT DISTINCT
    contents.contentid,
    transmission.value as transmission,
    type.value as type,
    make.value as make
FROM
    (SELECT DISTINCT contentid FROM modx_site_tmplvar_contentvalues) AS contents
INNER JOIN
    modx_site_tmplvar_contentvalues AS transmission
        ON contents.contentid = transmission.contentid
        AND transmission.value = 'automatic'
INNER JOIN
    modx_site_tmplvar_contentvalues AS make
        ON contents.contentid = make.contentid
        AND make.value = 'GMC'
INNER JOIN
    modx_site_tmplvar_contentvalues AS type
        ON contents.contentid = type.contentid
        AND type.value = 'sedan'

无论如何,请确保您在值列上有一个索引;这些查询会变慢。

关于mysql - 如何查询mysql以按多个值进行选择和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25416701/

相关文章:

mysql - 如何为表创建alter table语句?

mysql - 如何从MySQL旧密码升级到新密码系统

mysql - 从 MySQL 迁移到 psql

mysql - 选择多行数字

mysql根据客户端的日期组选择第一条记录

python - SSL 认证错误 > 主机名不匹配

php - 如何在 php mysql 搜索中加粗关键字?

mysql - Laravel 或Where 给出意想不到的结果

php - 未定义索引通知 : Why is this happening and how do I fix it?

MySQL - ORDER BY 与 UNION 的一部分