按find_in_set(),and_then和and_then排序

时间:2011-06-09 18:16:43

标签: mysql

这个mysql查询似乎不适合我:

select *
from myTable
order by
  find_in_set( category, "First, Second" ),
  sortby,
  title;

显然你不能在find_in_set函数之外订购?

有解决方法吗?我错过了什么吗?

感谢您的回复。

编辑:

这是正在运行的确切查询:

select
  uid,
  category,
  title,
  summary,
  image_url,
  link_url,
  link_text
from links_and_documents
where link_url != ''
  and status=1
order by
  find_in_set( category, "Test_Category_Two,Test_Category_One" ),
  sortby,
  title;

它会返回您期望的所有项目,但会按排序对它们进行排序,并完全忽略find_in_set函数。

如果我将,sortby,title放在查询末尾,则会按find_in_set函数对项目进行排序。

select
  uid,
  category,
  title,
  summary,
  image_url,
  link_url,
  link_text
from links_and_documents
where link_url != ''
  and status=1
order by
  find_in_set( category, "Test_Category_Two,Test_Category_One" );

谢谢你看看。

表格结构:

CREATE TABLE `links_and_documents` (
  `id` int(11) NOT NULL auto_increment,
  `dateadded` varchar(19) NOT NULL default '',
  `dateupdated` varchar(19) NOT NULL default '',
  `uid` varchar(16) NOT NULL default '',
  `clientuid` varchar(16) NOT NULL default '',
  `status` char(1) NOT NULL default '1',
  `sortby` varchar(16) NOT NULL default '',
  `category` text NOT NULL,
  `title` text NOT NULL,
  `information` text NOT NULL,
  `summary` text NOT NULL,
  `services` text NOT NULL,
  `link_url` text NOT NULL,
  `link_text` text NOT NULL,
  `document_url` text NOT NULL,
  `document_text` text NOT NULL,
  `image_url` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `uid` (`uid`),
  KEY `category` (`status`,`category`(30))
)

我没有收到错误。

3 个答案:

答案 0 :(得分:12)

几个月来我遇到了同样的问题:

order by find_in_set( category, "First, Second" )

有时使用工作,有时不工作。 今天我读了很多,下一个改变解决了我的问题:

ORDER BY FIELD( category, 'First', 'Second' )

希望现在帮助你还为时不晚。

答案 1 :(得分:3)

你不应该在

中留空格
order by find_in_set( category, "First, Second, Third, Fourth" )

应该是

order by find_in_set(category,"First,Second,Third,Fourth" )

答案 2 :(得分:0)

当您在mysql中对多个列进行排序时,您必须指定排序顺序,如下面的url所述,

Mysql Order By Multiple Columns

Mysql Sorting Rows