0

困境:我有一张桌子,里面有几百行。我想提交一个带有特定搜索词的 mysql_query,其中查询查找该词在列中按字母顺序排列的位置,然后返回放置前的 n 行和放置后的 n 行。

示例:假设我有一个如下所示的列(为了空间,我将其水平放置,但为了论证,我们假设这是列值的垂直列表):

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

如果我要对 term 运行查询courage,假设 n = 3,我希望它按此顺序返回以下行:

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

按字母顺序,这个词courage会出现在这些结果的中间,我们会遇到前面的 3 个条目和后面的 3 个条目。

语言注释:我使用的是 php 和 mysql。我没有任何代码要显示,因为我不确定这是否需要在where子句中,或者它是否需要子查询,或者是否需要在 php 中对变量进行处理,然后再将其传递给查询。

4

1 回答 1

2

您可以尝试两个 SELECTS 的 UNION。或者手动进行。

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

将返回 cookie、computer 和 cat(按降序排列)。

然后 SELECT term FROM table WHERE term >= 'courage' ORDER BY term 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;
于 2012-08-22T22:11:13.690 回答