我在下面的现有查询工作完美。但是,我有一个新字段来确定显示这些结果的区域顺序。
例如,如果用户正在浏览网站一(ID 123),则所有记录对于区域 123、234 和 543,必须显示区域 ID 123 的记录,然后根据我现有的顺序记录 234 和 543。这是什么区域的变量将始终$AreaID
。
请记住,我不是在按该区域过滤记录,我只是想按照 ASC 顺序将该区域的记录放在其他记录之上cont_id
我在任何地方都找不到一个例子,甚至给我一个可以实验的方向。我想我必须以某种方式单独选择它们吗?
$sql = "select *
from 202_articles
where cont_date_published <= CURDATE()
and cont_time_published < CURTIME()
and cont_category_id = $TypeID
ORDER by cont_id ASC
LIMIT 25";
任何帮助表示赞赏。
假设您有一个名为 AreaID
的列,则首先使用大小写按该条件进行排序:
$sql = "select *
from 202_articles
where cont_date_published <= CURDATE()
and cont_time_published < CURTIME()
and cont_category_id = $TypeID
ORDER by
CASE WHEN AreaID = $AreaID THEN 0 ELSE 1 END,
AreaID,
cont_id ASC
LIMIT 25";
您可以使用
一个简单的UNION JOIN
来选择具有特定cont_id
的所有内容,然后选择其他所有内容,然后按cont_id ASC
SELECT
*
FROM
202_articles
WHERE
cont_date_published <= CURDATE()
AND cont_time_published < CURTIME()
AND cont_category_id = $TypeID
AND cont_id = $AreaID
UNION
SELECT
*
FROM
202_articles
WHERE
cont_date_published <= CURDATE()
AND cont_time_published < CURTIME()
AND cont_category_id = $TypeID
ORDER BY
cont_id ASC
LIMIT 25
POC: http://sqlfiddle.com/#!9/3ae07/1
$sql = "select *
from 202_articles
where cont_date_published <= CURDATE()
and cont_time_published < CURTIME()
and cont_category_id = $TypeID
ORDER by cont_id ASC
LIMIT 25";
如果您知道该区域,则可以使用以下查询而不是上述查询。
$sql = "select *
from 202_articles
where cont_date_published <= CURDATE()
and cont_time_published < CURTIME()
and cont_category_id = $TypeID
ORDER by cont_id='$userarea' ASC, cont_id ASC
LIMIT 25";