困境:我有一张包含数百行的表格。我想提交一个带有特定搜索词的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中的变量执行某些操作它到查询。
答案 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;