Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql排序顺序操作_Mysql - Fatal编程技术网

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-我希望你有一个美好的一天。