0

如果这似乎不是一个合适的 SO 问题,我提前道歉。但是,我在其他任何地方都找不到答案。

我希望能够通过一种算法对结果进行排序,该算法使用规则根据不同的列或变量对结果进行排名。我的直觉是,使用内置的 MYSQL ORDER BY 比操作返回的记录集合要快得多。我在 MYSQL 中使用索引来加快对一个字段或两个字段的排序。但是我不知道如何创建一个规则或公式来对两个字段进行加权,并对权重进行优先级排序和施加逻辑。

例如: 假设我有一张评论表。我想创建一个算法,根据不同变量的组合权重和一些逻辑对这些评论进行排序。

如示例:返回今天首先编辑的结果。对于所有其他结果,50% 的回报取决于作者的声誉,50% 的回报取决于评论的创建时间。

表评:

id|reviewtext|lastedited|datecreated|authorid

表作者

id|name|reputation

MYSQL/PHP:

$SQL = "SELECT r.*, a.* FROM `reviews` r
LEFT JOIN `authors` a
on = r.authorid= a.id
WHERE reviewtext LIKE '%str%'
ORDER BY lastedited DESC datecreated DESC reputation DESC";

将首先按 lastedited 排序,然后按 datecreated 等排序。

如何使用具有逻辑权重等的更复杂的公式?

在此先感谢您的任何建议。

4

1 回答 1

1

您可以在 ORDER BY 子句中使用表达式 -

SELECT r.*, a.*
FROM reviews r
INNER JOIN authors a
    ON r.authorid = a.id
WHERE reviewtext LIKE '%str%'
ORDER BY
    IF(lastedited >= CURRENT_DATE, lastedited, '0000-00-00') DESC,
    (SOME EXPRESSION EVALUATING DATE AND REPUTATION) DESC
于 2013-07-25T01:32:46.497 回答