внутреннее объединение на MySQL просто работать с одним столбцом - PullRequest
1 голос
/ 05 декабря 2011

Я не знаю, проснулся ли я глупо, но я не могу решить это: S

Я пытаюсь получить элементы из таблицы wp_posts, соединяя ее с таблицей wp_postmeta два раза (чтобы получить разные значения)и создание условий с этими двумя значениями.

SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.* FROM wp_posts
INNER JOIN wp_postmeta ds ON (ds.meta_key = 'date_start' AND ds.post_id = wp_posts.ID)
INNER JOIN wp_postmeta de ON (de.meta_key = 'date_end' AND ds.post_id = wp_posts.ID)
WHERE 1 = 1
  AND wp_posts.post_type = 'event'
  AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'closed' OR wp_posts.post_status = 'private' OR wp_posts.post_status = 'hidden')
  AND CAST(ds.meta_value AS DECIMAL(10,0)) <= 1323043200
  AND (CAST(de.meta_value AS DECIMAL(10,0)) >= 1323129599 OR de.meta_value = '')
ORDER BY ds.meta_value DESC
LIMIT 0, 5

Я не знаю, почему все столбцы объединяются только с одной строкой в ​​'de' table

Я имею в виду:

ID meta_1 post_id meta_2
1     1       1    xxx
2     2       1    xxx
3     3       1    xxx
...

В условии de.meta_key = 'date_end' AND ds.post_id = wp_posts.ID Я говорю, что идентификатор из wp_posts должен быть равен post_id из 'de' table (wp_postmeta), но этоне соблюдается: |

Есть идеи о моей ошибке ???

1 Ответ

2 голосов
/ 05 декабря 2011

Изменение

(de.meta_key = 'date_end' AND ds.post_id = wp_posts.ID)
--> repeated match of ds.post_id=wp.posts.ID

Для

(de.meta_key = 'date_end' AND de.post_id = wp_posts.ID)
...