在按字母顺序排列搜索词之前和之后选择n行

时间:2012-08-22 22:06:58

标签: php mysql

困境:我有一张包含数百行的表格。我想提交一个带有特定搜索词的mysql_query,其中查询在列中按字母顺序查找术语的位置,然后在放置之前返回n行,在放置之后返回n行。

示例:想象一下,我有一个如下所示的列(我为了空间而将它水平放置,但为了争论,让我们假装这是一个列的垂直列表值):

|apple|asus|adder|billy|cat|dog|zebra|computer|mouse|cookie|donkey|

如果我在术语courage上运行查询,假设n = 3,我希望按顺序返回以下行:

|cat|computer|cookie|dog|donkey|mouse|

按字母顺序排列,单词courage将落在这些结果的中间位置,我们会遇到前3个条目和以下3个条目。

语言备注:我正在使用php和mysql。我没有要显示的代码,因为我不确定这是否需要在where子句中,或者是否需要子查询,或者在处理之前需要对php中的变量执行某些操作它到查询。

1 个答案:

答案 0 :(得分:2)

您可以尝试两个SELECTS的UNION。或者手动完成。

SELECT term FROM table WHERE term < 'courage' ORDER BY term DESC LIMIT 3;

将返回cookie,计算机和cat(按降序排列)。

然后     SELECT术语FROM表WHERE术语&gt; ='勇气'ORDER BY术语ASC LIMIT 3;

将返回狗,驴和老鼠。

在PHP中,你得到两个集合,反转第一个集合并加入。

完整的SQL解决方案可能

SELECT term FROM (
    SELECT term FROM table WHERE term < 'courage' ORDER BY term DESC LIMIT 3 )
    UNION
    SELECT term FROM table WHERE term >= 'courage' ORDER BY term ASC LIMIT 3 )
) ORDER BY term;