0

ジレンマ:数百行のテーブルがあります。特定の検索用語を含むmysql_queryを送信したいと思います。クエリは、用語が列のアルファベット順に配置される場所を見つけ、配置前のn行と配置後のn行を返します。

例:次のような列があると想像してください(スペースのために水平に配置していますが、議論のために、これが列値の垂直リストであると仮定しましょう):

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

n = 3と仮定して、用語に対してクエリを実行する場合courage、次の行をこの順序で返すようにします。

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

アルファベット順に、単語courageはそれらの結果の真ん中に着地し、前の3つのエントリと次の3つのエントリに遭遇します。

言語ノート:私はphpとmysqlを使用しています。whereこれを句に含める必要があるのか​​、サブクエリが必要なのか、クエリに渡す前にphpの変数を使用して何かを行う必要があるのか​​わからないため、表示するコードはありません。

4

1 に答える 1

2

2つのSELECTのUNIONを試してみてください。または手動で行います。

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

クッキー、コンピューター、猫を(降順で)返します。

次に、SELECT term FROM table WHERE term> ='courage' ORDER BY term ASC LIMIT 3;

犬、ロバ、マウスを返します。

PHPでは、2つのセットを取得し、最初のセットを逆にして結合します。

完全に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 に答える