【问题标题】:How to order my MySQL records ? | MySQL - WordPress如何订购我的 MySQL 记录? | MySQL - WordPress
【发布时间】:2013-02-27 18:20:42
【问题描述】:

我正在为基于 WordPress 的客户创建一个网站。我的客户希望在主页中显示按类别分组的文章。

例如,假设我们有类别“Cat A”、“Cat B”和“Cat C”。我的客户希望在主页中以“Cat B”、“Cat A”和“Car C”的方式显示类别顺序,然后在主页中列出每个类别的 6 个帖子。

假设这是我要显示的结果:

Cat B
---------------------------
Cat B - Article #1
Cat B - Article #2
Cat B - Article #3
Cat B - Article #4
Cat B - Article #5
Cat B - Article #6

Cat A
---------------------------
Cat A - Article #1
Cat A - Article #2
Cat A - Article #3
Cat A - Article #4
Cat A - Article #5
Cat A - Article #6

Cat C
---------------------------
Cat C - Article #1
Cat C - Article #2
Cat C - Article #3
Cat C - Article #4
Cat C - Article #5
Cat C - Article #6

我正在寻找的是一种排序要在主页中显示的类别的方法。

现在我已经在我的 WordPress 仪表板中创建了一个页面,从那里我可以根据需要对我的类别进行排序,然后我可以将订单选项保存在 wp 选项页面中。问题是,如何根据后端的顺序对前端的类别进行排序。

假设类别如下:

Categories
-----------------
Name   |  ID
-----------------
Cat A  |  100
Cat B  |  101
Cat C  |  102

在我的 wp_options 表中,我可以存储以下数组:

array(
    1 => 101,
    2 => 100,
    3 => 102
)

数组键可以是订单序列,值可以是类别ID。

现在,通过知道序列是什么,我如何使用单个 MySQL 查询获得结果?

【问题讨论】:

  • What I am looking for, is a way to order the categories to be displayed in the home page. 使用 case 语句生成一列,然后您使用该列对CASE Name When 'Cat A' then 2 when 'Cat B' then 1 when 'Cat C' then 3 end as SortByme进行排序
  • @xQbert:行动! :) 你说的对。但假设,我使用的是默认的 WordPress 表,带有 wp_posts 和 wp_terms。

标签: mysql wordpress


【解决方案1】:

分类(例如类别或标签)中的每个项目(例如类别或标签)都有一个名称、一个 slug(可以进入 URL 的短名称)和一个描述。

如果您愿意将描述专门用于订购您的类别商品,您可以在该字段中为 Cat B 输入 1,为 Cat A 输入 2,为 Cat C 输入 3。您可以从仪表板执行此操作。

然后,当您检索术语时,您可以使用此查询以适当的顺序获取类别 ID。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY tt.description, t.term_id

但这会占用您的描述字段,或者至少将一些内部垃圾放入由少数(但不是很多)主题用于显示目的的字段中。

您也可以将 slug 用于此订购目的。例如,您可以指定 '1catb' 来代替 'catb' (对于其他 slug 使用 '2cata' 和 '3catc')。同样,它会对您的显示产生一些影响,这一次是以您网站中某些 URL 的形式出现的。这是您在这种情况下可能使用的查询/

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY t.slug, t.term_id

在我看来,将单个 wp_options 行转换为可连接表太麻烦了,不值得麻烦,尤其是对于经常显示的网站前门页面。但是您可以为此使用多个 wp_options 行。像这样给你的 wp_options 名称和值:

   option_name       option_value
   mycat_order_001       2
   mycat_order_002       1 
   mycat_order_003       3

然后使用这样的查询来按顺序获取您的类别名称。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
  JOIN wp_options o ON (    o.option_name LIKE 'mycat_order_%'
                        AND o.option_value = t.term_id)
 WHERE tt.taxonomy = 'category'
 ORDER BY o.option_name, t.term_id

这将以正确的顺序提取您的条款。当您的用户指定所需的顺序时,这里的成本是更新 wp_options 表的更复杂的代码。

所以有一些选择。请记住,简单就是好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多