复杂的MySQL查询

Ben*_*ock 4 php mysql wordpress

我正在wordpress中创建一个网站,其中包含有关电视节目的信息.我正在使用自定义字段来选择每个帖子.

该表看起来像这样

+----+---------+----------+------------+
| id | post_id | meta_key | meta_value |
+----+---------+----------+------------+
| 1  |    1    |   name   | Smallville |
| 2  |    1    |  season  |     1      |
| 3  |    1    |  episode |     1      |
| 4  |    2    |   name   | Smallville |
| 5  |    2    |  season  |     1      |
| 6  |    2    |  episode |     2      |
+----+---------+----------+------------+
Run Code Online (Sandbox Code Playgroud)

基本上我需要做的是选择名为"Smallville"的所有电视节目,然后根据季节对剧集进行排序.我认为这会相当简单,但我所尝试的一切都没有回报.

你能解释我怎么能这样做吗?

Luk*_*sik 11

你可以这样做:

SELECT 
    t1.post_id, 
    t1.meta_value AS name, 
    t2.meta_value AS season, 
    t3.meta_value AS episode
FROM
    (
    SELECT *
    FROM the_table
    WHERE meta_key = 'name'
    ) t1
INNER JOIN
    (
    SELECT *
    FROM the_table
    WHERE meta_key = 'season'
    ) t2 ON t1.post_id = t2.post_id
INNER JOIN
    (
    SELECT *
    FROM the_table
    WHERE meta_key = 'episode'
    ) t3 ON t1.post_id = t3.post_id
Run Code Online (Sandbox Code Playgroud)

这会给你结果:

| post_id | name       | season | episode |
-------------------------------------------
|    1    | Smallville | 1      | 1       |
|    2    | Smallville | 1      | 2       |
Run Code Online (Sandbox Code Playgroud)

在这种形式下,任何操作都更容易.

你需要的是添加:

WHERE name = 'Smallville'
ORDER BY season, episode
Run Code Online (Sandbox Code Playgroud)


And*_*mar 7

使用自联接组合行,你很高兴:

SELECT      *
FROM        yourtable name
INNER JOIN  yourtable season 
            on season.post_id = name.post_id
            and season.meta_key = 'season'
INNER JOIN  yourtable episode
            on episode.post_id = name.post_id
            and episode.meta_key = 'episode'
WHERE       name.meta_key = 'name'
            and name.meta_value = 'Smallville'
ORDER BY    season.meta_value, episode.meta_value
Run Code Online (Sandbox Code Playgroud)