我想通过存储在第二个表中的(排序)值(" sortDate")来排序表的所有行(" posts")(&#34) ;元&#34)
。
第二个表的(sort-)值存储为键值对。关键是" publishDate'
两个表之间的链接列是" postID"。
第二个表的(sort-)值是可选的,或者可以多次输入
- >如果多次输入(sort-)值,我想使用最大值
- >如果第二个表中没有(sort-)值,我想使用" postDate" - 改为第一个表的值。
这是我的解决方案:
SELECT posts.postID,posts.postDate,metaDate.publishDate,
CASE
WHEN metaDate.publishDate is null Then posts.postDate
ELSE metaDate.publishDate
END AS sortDate /*fallback for those rows that do not have a matching key-value pair in second table*/
From posts
Left Join
(
Select meta.postID,MAX(metaValue) as publishDate
From meta
Where meta.metaKey = 'publishDate'
GROUP BY meta.postID
) As metaDate /*create a table with the maximum of publishDate, therefor handle multiple entries*/
ON posts.postID = metaDate.postID
ORDER BY sortDate DESC;
另见 sqlfiddle with this solution --->
有更聪明/更快的方法吗? 因为我不是一个SQL专家 - 我监督的任何事情?
(背景:
表的结构是一个wordpress-database-structure,因此给出了一个相关的主题是"按wordpress中的自定义字段对帖子进行排序" - 但我找到的解决方案没有处理多个或可选的自定义字段)
感谢您的评论和支持