mysql排序顺序操作
我有一个问题与我目前正在从事的一个项目有关。 在我的脚本中,所有帖子当前都以这种方式显示:mysql排序顺序操作,mysql,Mysql,我有一个问题与我目前正在从事的一个项目有关。 在我的脚本中,所有帖子当前都以这种方式显示: $sql = "SELECT * FROM posts" . "\n WHERE page_slug = '" . $this->slug . "'" . "\n AND active = '1'" . "\n ORDER BY id DESC" . $pg->limit; $result = $db->fetch_all
$sql = "SELECT * FROM posts"
. "\n WHERE page_slug = '" . $this->slug . "'"
. "\n AND active = '1'"
. "\n ORDER BY id DESC" . $pg->limit;
$result = $db->fetch_all($sql);
SELECT * FROM posts
WHERE page_slug = @slug AND active = 1
ORDER BY (id != @yourID), id DESC, LIMIT @limit
这很好,尽管现在的问题是,我希望某个项目先显示在所有其他项目之前。我试图给这个特定的项目一个非常高的ID(例如1000),尽管如果我创建一个新的帖子,新的帖子ID突然从1001开始,并跳到第一个位置
有没有人知道我如何避免这种情况发生,或者至少我如何通过调整排序顺序来“欺骗”某个特定项目,使其位于第一个位置
一些建议将不胜感激
多谢各位,
Patrick您可以添加一个名为
rank
(或其他有意义的内容)的新列,为更重要的行将其分配到零上的某个值。然后,您可以先按rank
排序,然后按id
排序。您可以添加一个名为rank
的新列(或其他有意义的列),为更重要的行将其赋给零以上的某个值。然后,您将首先按排名
,然后按id
排序
$sql = "SELECT *, case when id = 1000 then 0 else 1 end as OrderMe FROM posts"
. "\n WHERE page_slug = '" . $this->slug . "'"
. "\n AND active = '1'"
. "\n ORDER BY OrderMe, id DESC" . $pg->limit;
$result = $db->fetch_all($sql);
当然,您不必在case语句中使用1000作为id,但您提到了这是您希望在顶部使用的id
当然,您不必在case语句中使用1000作为id,但您提到了它是您想要放在顶部的id…如果它还不是某种模块,请将该代码转换为模块,不要复制它-应该很容易更改。然后,只需在数据库中添加一些
INT
字段(priority
,例如)和按优先级排序,然后按ID排序。如果它还不是某种模块,请将该代码转换为一个模块,不要复制它-应该很容易更改。然后,只需向数据库中添加一些INT
字段(priority
,例如)和按优先级排序,然后按ID排序。您可以技巧
,正如您所说,DBMS的方式如下:
$sql = "SELECT * FROM posts"
. "\n WHERE page_slug = '" . $this->slug . "'"
. "\n AND active = '1'"
. "\n ORDER BY id DESC" . $pg->limit;
$result = $db->fetch_all($sql);
SELECT * FROM posts
WHERE page_slug = @slug AND active = 1
ORDER BY (id != @yourID), id DESC, LIMIT @limit
@limit
和@slug
是您当前的变量。@yourID
变量是您想要放在顶部的ID。如果不止一个,请在()中使用in
子句。基本上,对于ID等于您正在查找的帖子,这将返回false
,或者实际上返回0
,对于其余帖子,这将返回true
,或者实际上返回1
因此,对新生成的值应用第一个和升序将产生顶部有0
(相等的值):)您可以技巧,正如您所说,DBMS是这样的:
$sql = "SELECT * FROM posts"
. "\n WHERE page_slug = '" . $this->slug . "'"
. "\n AND active = '1'"
. "\n ORDER BY id DESC" . $pg->limit;
$result = $db->fetch_all($sql);
SELECT * FROM posts
WHERE page_slug = @slug AND active = 1
ORDER BY (id != @yourID), id DESC, LIMIT @limit
@limit
和@slug
是您当前的变量。@yourID
变量是您想要放在顶部的ID。如果不止一个,请在()中使用in
子句。基本上,对于ID等于您正在查找的帖子,这将返回false
,或者实际上返回0
,对于其余帖子,这将返回true
,或者实际上返回1
因此,对新生成的值应用第一个和升序将得到顶部有0
(相等的值):)我尝试了您的解决方案,因为使用:。“\n按等级排序,id描述”$pg->limit;但它似乎不起作用。除非另有规定,否则所有的ORDER BY都是升序的。我尝试了您的解决方案,因为它似乎很简单,使用:。“\n按等级排序,id描述”$pg->limit;但它似乎不起作用,除非另有规定,否则所有的ORDER BY都是升序的。谢谢-这听起来是一个很好的解决方案!谢谢Mosty Mostachothanks-这听起来是一个很好的解决方案!谢谢Mosty MostachoThank-这似乎也是一个非常有趣的解决方案。问题:有没有办法定义多个id?例如1000、1001和1002?是的,有多个when/then语句。。。例如当id=1000时,然后当id=2002时为0,然后为1其他2
或在eg中使用当id在(10002003054)中时,则为0其他1
有关案例陈述的更多详细信息,请参阅未决-当(…)中的id像charm一样工作时!这是一个非常好的解决方案,非常感谢appclay-我希望你有一个美好的一天。谢谢-这似乎也是一个非常有趣的解决方案。问题:有没有办法定义多个id?例如1000、1001和1002?是的,有多个when/then语句。。。例如当id=1000时,然后当id=2002时为0,然后为1其他2
或在eg中使用当id在(10002003054)中时,则为0其他1
有关案例陈述的更多详细信息,请参阅未决-当(…)中的id像charm一样工作时!这是一个非常好的解决方案,非常感谢appclay-我希望你有一个美好的一天。