从具有单个查询的表中选择类似标题

时间:2014-04-15 02:34:24

标签: mysql

我想查询单个表并选择具有相似标题的任何条目。类似的标题是具有完全相同的字符串的标题(不区分大小写)但附加了“(新鲜)”。结果应返回任何匹配项的idtitle

例如,如果这是我的表:

ID    TITLE
1     Bacon
2     Eggs
3     Eggs (fresh)
4     ketchup
5     Ketchup (Fresh)

然后我想提取:

array(
    array(
        id => 2
        title => Eggs
    ),
    array(
        id => 3
        title => Eggs (fresh)
    )
),
array(
    array(
        id => 4
        title => ketchup
    ),
    array(
        id => 5
        title => Ketchup (Fresh)
    )
)

目前我正在使用两个单独的查询。首先,我选择所有标题,然后循环查找哪些条目的标题附加了“(新鲜)”。我确信必须有一种更有效的方法在一个查询中提取这些匹配的标题,但我不能指责它。

1 个答案:

答案 0 :(得分:2)

试试这个:

select src.id ID_wo_fresh, tgt.id ID_w_fresh, src.title
from tbl src
inner join tbl tgt on src.title= replace(replace(tgt.title,' (fresh)',''),' (Fresh)','')
and src.id <> tgt.id

这将返回名称中没有“fresh”或“Fresh”的产品ID,名称中带有“fresh”或“Fresh”的ID以及名称本身。请注意,这将排除找不到匹配的行,即仅具有带或不带后缀的名称,但不包括两者。要显示所有行,请改用left join