Нечто подобное может дать вам желаемые результаты, но это будет довольно медленно. Может быть, кто-то еще может предложить более эффективное решение:
SELECT t1.* FROM tags AS t1 JOIN tags AS t2
ON LIST_INTERSECT(t1.tags, t2.tags) != ''
WHERE t1.web='google.com'
И вам также понадобится эта сохраненная функция (просто скопируйте и вставьте этот код в клиент mysql после подключения к серверу и выбора базы данных):
DELIMITER $$
CREATE FUNCTION LIST_INTERSECT(
list1 VARCHAR(255), list2 VARCHAR(255)
) RETURNS VARCHAR(255)
BEGIN
SET @delim = ',';
SET @list = list1;
SET @overlap = '';
LOOPING: LOOP
IF (LOCATE(@delim, @list) > 0) THEN
SET @word = SUBSTRING_INDEX(@list, @delim, 1);
SET @list = SUBSTR(@list, LOCATE(@delim, @list) + 1);
ELSE
SET @word = @list;
SET @list = NULL;
END IF;
IF (CONCAT(',',list2,',') LIKE CONCAT('%,',@word,',%')) THEN
SET @newword = @word;
IF (@overlap != '') THEN
SET @newword = CONCAT(',', @word);
END IF;
SET @overlap = CONCAT(@overlap, @newword);
END IF;
IF (@list IS NULL) THEN
LEAVE LOOPING;
END IF;
END LOOP LOOPING;
RETURN @overlap;
END$$
DELIMITER ;
(Команда DELIMITER
предназначена для изменения разделителя оператора с ";" на "$$" и обратно. Это необходимо сделать для определения пользовательских функций или процедур .)
По сути, этот код ищет сайт в столбце web
, затем он находит все другие сайты, которые имеют общие ключевые слова в столбце tags
. Используя это, если вы ищете «google.com», он также вернет «bing.com» и «yahoo.com», потому что все три из этих записей имеют «search» и «searchengine» в tags
.