4

帮助创建搜索条件

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

值字段名称可以重合。
如果值相同,则输出一行或五行。
对不起我英语不好

[复制自评论:]

如果请求不带条件,则重复记录的名称。例如,具有相同名称的 WHERE name LIKE "City1" 将返回五行,但它们的 id 将不同。

但如果没有匹配,则显示五条记录。

示例 搜索LIKE "City1%"显示记录三个 City1、City1、City1。

示例 2. 搜索LIKE "City2%"显示记录三个 City2、City2、City2_en、City2_rect、City2_les。

4

2 回答 2

0

不,不可能像您在问题中那样有条件限制语句。

如果您使用的是存储过程,则可以将参数或局部变量作为您的限制值,如下所述:

如何仅使用(My)SQL 使限制偏移动态化

如果您不想使用存储过程,这里有一些 sql,如果名称完全匹配,则返回一行,如果名称部分匹配,则返回 5 行:

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 回答