4

検索条件の作成を手伝う

SELECT *
FROM mlt_adr_city
WHERE name LIKE "Text%" 
AND region_id = 59
AND id <> 0 
IF (name = name, LIMIT 1, LIMIT 5)

値フィールド名は一致する可能性があります。
値が同じ場合は、1 行または 5 行が出力されます。
すみません、私は下手な英語です

[コメントからコピー:]

条件のないリクエストの場合、レコードが繰り返される名前。たとえば、同じ名前の WHERE name LIKE "City1" は 5 行を返しますが、ID は異なります。

ただし、一致するものがない場合は、5 つのレコードを表示します。

例 検索LIKE "City1%"表示では、City1、City1、City1 の 3 つのレコードが表示されます。

例 2. LIKE "City2%"City2、City2、City2_en、City2_rect、City2_les の 3 つの表示レコードを検索します。

4

2 に答える 2

0

いいえ、質問のように条件付き制限ステートメントを使用することはできません。

ストアドプロシージャを使用している場合は、ここで説明するように、制限値としてパラメータまたはローカル変数を使用できます。

(My)SQLのみを使用して制限オフセットを動的にする方法

ストアドプロシージャを使用したくない場合は、名前が完全に一致する場合は1行、部分的に名前が一致する場合は5行を返すSQLを次に示します。

SELECT * FROM mlt_adr_city
    WHERE
    name = 'Text'
    AND region_id = 59
    AND id <> 0
    LIMIT 1
UNION
SELECT * FROM mlt_adr_city
    WHERE
    name like 'Text%'
    AND region_id = 59
    AND id <> 0
    AND NOT EXISTS (SELECT 1 FROM mlt_adr_city WHERE name = 'Text' AND region_id = 59 AND id <> 0)
    LIMIT 5;
于 2012-12-03T11:51:33.327 に答える
0

SELECT * FROM mlt_adr_city WHERE name LIKE "Text%"  AND region_id = 59 AND id <> 0 GROUP BY name LIMIT 5
于 2012-12-04T07:36:16.017 に答える