MySQL ORDER BY FIELD包含一串数字

时间:2011-11-12 22:02:15

标签: mysql wordpress sql-order-by

我正在尝试根据存储在数据库中某个字段中的这些帖子的顺序(通过另一个地方的另一个自定义字段设置)修改自定义帖子类型后期导航的get_previous_post_sort/get_next_post_sort顺序。

默认情况下get_previous_post_sort/get_next_post_sort订单只是输入这些帖子的日期,但我需要它们按数据库中的自定义字段排序。

数据库中的字段按照我需要的顺序存储帖子的帖子ID,如下所示: 1746,1741,1751,1755,1758,1761,1749,1764,1776,1767,1781,1770,1773,1784,1787,1790,1793,1798,1801,1804,1807,1810,1813,1816,1819, 1822,1825,1828,1831,1834,1837,1840,1843,1846

我已经能够从自定义字段中输入这一串数字,但我遇到了麻烦,实际上影响了我的上一个/下一个链接。调试输出中的查询看起来很稳定:

SELECT p.*  
FROM wp_posts AS p  
INNER JOIN wp_postmeta AS m ON p.ID = m.post_id  
WHERE p.post_date < '2011-11-09 17:08:32'  
AND p.post_type = 'story-images'  
AND p.post_status = 'publish'  
AND m.meta_key = 'editorial'  
AND m.meta_value = 771  
ORDER BY FIELD(p.ID,1627,1624,1630,1633,1636,1639,1642,1645,1648,1653,1656,1659,1662,1665,1668,1671,1694,1730,1697,1700,1703,1706,1709,1712,1715,1718,1721,1724,1727)

这是我用来过滤所有内容的实际代码(这是在吐出这个查询):http://pastebin.com/ceiib5Hf

这应该让这更清楚。感谢您的回复!

2 个答案:

答案 0 :(得分:2)

您可以使用FIELD(...)

ORDER BY FIELD(p.ID,1746,1741,...,1840,1843,1846)

答案 1 :(得分:1)

将这些“魔术”数字放在第二个表中,该表有两行:

  • 幻数
  • 排序顺序

现在将您的表与第二个表联系起来,并按排序顺序排序。这样可以更轻松地维护查询和数字。