У меня есть таблица, как:Получить все идентификаторы, где `name` LIKE% current_name в одном запросе
id | name
1 | gecko
2 | b-gecko
3 | c-gecko
4 | toucan
5 | s-toucan
Я хотел бы получить в одном запросе id
, name
и lookalike
полей. Что-то вроде:
id | name | lookalike
1 | gecko | 1,2,3
4 | toucan | 4,5
... или как:
id | name | lookalike
1 | gecko | 2
1 | gecko | 3
4 | toucan | 5
даже возможно ли это? У меня есть 50 000 записей в этой таблице, и для каждой записи потребуется много простых запросов, если вы проверяете строку за строкой.
Я думаю, что запрос должен выглядеть так:
SELECT t1.`id`, t1.`name`, (SELECT t2.`id` FROM `table1` t2 WHERE t2.`name` LIKE CONCAT('%', t1.`name`)) as `lookalike` FROM `table1` t1
... но я отсутствую CONCAT. Спасибо!
LE: Даже при использовании
SELECT t1.`id`, t1.`name`, (SELECT GROUP_CONCAT(id SEPARATOR ',') FROM `table1` t2 WHERE t2.`name` LIKE CONCAT('%', t1.`name`) AND t1.name<>t2.name) as `lookalike` FROM `table1` t1
я получаю много аварий сервера из-за большое количество строк, которые будут проверены. Я знаю, что у меня самая худшая ситуация для LIKE, но я пытаюсь понять, как ее оптимизировать.
Для 2-й версии я попытался
SELECT
t.id,
t.name,
t2.id
FROM
table1 t
LEFT JOIN
table1 t2
ON
t2.name LIKE CONCAT('%', t.name)
, но это один выходит из строя сервер тоже.
от где поле 'lookalike' приходит? – Jens
Он создается подзапросом, который ищет идентификаторы строк с именем 'name', заканчивающимся так же, как и исходная строка ... Прошу прощения за мое объяснение, но, пожалуйста, посмотрите, что является желаемым результатом. – valicu2000
И что такое результат вашего запроса? – Jens