フルテキスト インデックスを使用して効率的に検索を実行し、別のソリューションを使用して選択リストの列をテストできます (これは、WHERE 句のフィルターを通過する行に対してのみ実行されます)。
SELECT ID, StreetName, StreetNumber, StreetType,
(StreetName like '%1411%') AS `StreetName_matches`,
(StreetNumber like '%1411%') AS `StreetNumber_matches`,
(StreetType like '%1411%') AS `StreetType_matches`
FROM Locations
WHERE MATCH(ID, StreetName, StreetNumber, StreetType)
AGAINST('1411*' IN BOOLEAN MODE)
または、列に 4 つの個別のフルテキスト インデックスを作成し、それぞれを順番に検索することもできます。
SELECT ID, StreetName, StreetNumber, StreetType,
MAX(`ID_Matches`) AS `ID_Matches`,
MAX(`StreetName_Matches`) AS `StreetName_Matches`,
MAX(`StreetNumber_Matches`) AS `StreetNumber_Matches`,
MAX(`StreetType_Matches`) AS `StreetType_Matches`
FROM (
SELECT SELECT ID, StreetName, StreetNumber, StreetType,
1 AS `ID_Matches`,
NULL AS `StreetName_Matches`,
NULL AS `StreetNumber_Matches`,
NULL AS `StreetType_Matches`
FROM Locations
WHERE MATCH(ID) AGAINST('1411*' IN BOOLEAN MODE)
UNION ALL
SELECT SELECT ID, StreetName, StreetNumber, StreetType,
NULL AS `ID_Matches`,
1 AS `StreetName_Matches`,
NULL AS `StreetNumber_Matches`,
NULL AS `StreetType_Matches`,
FROM Locations
WHERE MATCH(StreetName) AGAINST('1411*' IN BOOLEAN MODE)
UNION ALL
SELECT SELECT ID, StreetName, StreetNumber, StreetType,
NULL AS `ID_Matches`,
NULL AS `StreetName_Matches`,
1 AS `StreetNumber_Matches`,
NULL AS `StreetType_Matches`,
FROM Locations
WHERE MATCH(StreetNumber) AGAINST('1411*' IN BOOLEAN MODE)
UNION ALL
SELECT SELECT ID, StreetName, StreetNumber, StreetType,
NULL AS `ID_Matches`,
NULL AS `StreetName_Matches`,
NULL AS `StreetNumber_Matches`,
1 AS `StreetType_Matches`,
FROM Locations
WHERE MATCH(StreetTYPE) AGAINST('1411*' IN BOOLEAN MODE)
) AS t
GROUP BY t.ID;
また、 Sphinx SearchやApache Solrなど、より完全な機能を備えた全文検索テクノロジを検討することもできます。
たとえば、Solr のクエリに一致する列を返す方法への回答を参照してください..?