Запросить две таблицы и создать столбцы из значений, чтобы включить сортировку - PullRequest
0 голосов
/ 04 июля 2018

У меня есть данные в базе данных WP wp_post и wp_post_meta: одна содержит уникальную запись для «семинаров», а вторая содержит метаданные, относящиеся к каждому семинару. Таблицы выглядят так:

WP_POST TABLE

| post ID   | post title    | post type | post content etc.
|---------------------------------------------------------
|   1       | workshop 1    | workshop  | cooking with apples
|   2       | workshop 2    | workshop  | cooking with pears
|   3       | workshop 3    | workshop  | cooking with bananas

WP META TABLE

| post ID   | meta key      | meta value    | etc.
|---------------------------------------------------------
|    1      | summary       | apples        | ..
|    1      | date          | 20100518      | ..
|    1      | duration      | 1 hour        | ..
|    2      | summary       | pears         | ..
|    2      | date          | 20100623      | ..
|    2      | duration      | 1/2 day       | ..
|    3      | summary       | bananas       | ..
|    3      | date          | 20101111      | ..
|    3      | duration      | all day       | ..

Я играл с вопросами.

SELECT post_title, post_date, post_type, meta_key, meta_value, post_content
FROM wp_posts as post INNER JOIN wp_postmeta as meta ON post.ID = meta.post_id 
WHERE post.post_status = "publish" AND post.post_type = "workshop"

Этот запрос дает мне одну таблицу, которая выглядит следующим образом.

| post ID   | post title    | post type     | meta key      | meta value    | etc.
|--------------------------------------------------------------------------------
|    1      | workshop 1    | workshop      | summary       | apples        | ..
|    1      | workshop 1    | workshop      | date          | 20100518      | ..
|    1      | workshop 1    | workshop      | duration      | 1 hour        | ..
|    2      | workshop 2    | workshop      | summary       | pears         | ..
|    2      | workshop 2    | workshop      | date          | 20100623      | ..
|    2      | workshop 2    | workshop      | duration      | 1/2 day       | ..
|    3      | workshop 3    | workshop      | summary       | bananas       | ..
|    3      | workshop 3    | workshop      | date          | 20101111      | ..
|    3      | workshop 3    | workshop      | duration      | all day       | ..

Что мне нужно сделать, так это отсортировать по значению метаключения «дата», но я не уверен, что это лучший способ сделать это. Можно ли отсортировать по «мета-значению» по дате «мета-ключа»?

Я думаю Мне нужно СОЗДАТЬ подобную таблицу, чтобы это было возможно, но я не знаю, как это сделать, или даже если это требуемый подход.

| post ID   | post title    | summary   | date      | duration | etc.
|--------------------------------------------------------------
|   1       | workshop 1    | apples    | 20100518  | 1 hour
|   2       | workshop 2    | pears     | 20100623  | 1/2 day
|   3       | workshop 3    | bananas   | 20101111  | all day

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете использовать агрегацию для отображения метаданных в разных столбцах для каждого сообщения, например

SELECT p.post_title, 
  p.post_date,
  p.post_type,
  p.post_content,
  MAX(CASE WHEN m.meta_key = 'summary' THEN m.meta_value ELSE NULL END) summary,
  MAX(CASE WHEN m.meta_key = 'duration' THEN m.meta_value ELSE NULL END) duration,
  MAX(CASE WHEN m.meta_key = 'date' THEN m.meta_value ELSE NULL END) `date`
FROM wp_posts as p
INNER JOIN wp_postmeta as m ON p.ID = m.post_id 
WHERE p.post_type = "workshop" AND p.post_status = "publish"
GROUP BY p.post_title, 
  p.post_date,
  p.post_type,
  p.post_content
ORDER BY STR_TO_DATE(MAX(CASE WHEN m.meta_key = 'date' THEN m.meta_value ELSE NULL END), '%Y%m%d')

Чтобы упорядочить ваш набор данных со значением метаданных, вам необходимо сначала преобразовать его в объект даты, используя STR_TO_DATE

Демо

0 голосов
/ 04 июля 2018

Вы можете отсортировать по дате, используя join:

select p.*, d.meta_value as date
from wp_post p join
     wp_meta d
     on d.post_id = p.post_id and d.meta_key = 'date'
order by d.meta_value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...