Чтобы получить ответ на свой вопрос, запрос должен выглядеть как этот
SELECT *
FROM mytable
WHERE places LIKE('%toronto%')
Но, имейте в виду, что, как() медленно.
Чтобы косвенно ответить на ваш вопрос, ваша схема базы данных ошибочна. Это неправильный способ сделать отношения M: N (многие-ко-многим).
Представьте себе вместо того, чтобы у вас была эта
mytable place mytable_place
+------------+ +----------+----------+ +------------+----------+
| mytable_id | | place_id | name | | mytable_id | place_id |
+------------+ +----------+----------+ +------------+----------+
| 1 | | 1 | new york | | 1 | 1 |
| 2 | | 2 | toronto | | 1 | 2 |
| 3 | | 3 | london | | 1 | 3 |
+------------+ +----------+----------+ | 2 | 2 |
| 3 | 1 |
| 3 | 3 |
+------------+----------+
Таблица mytable_places
является то, что называется справочную таблицу (или, Xref/таблица перекрестных ссылок, или корреляционная таблица). Его единственная работа - следить за тем, какие записи mytable
имеют записи place
, и наоборот.
Из этого примера мы видим, что первый mytable
запись имеет все 3 места, то второй имеет только Торонто, а третий имеет википедия и лондон.
Это открывает вам слишком разнообразные запросы, которые были бы сложными, дорогими или невозможными с вашим текущим дизайном.
Хотите знать, сколько mytable
записей есть toronto? Нет проблем
SELECT COUNT(*)
FROM mytable_place x
LEFT JOIN place p
ON p.place_id = x.place_id
WHERE p.name = 'toronto';
Как насчет количества mytable
записей на месте, отсортированные?
SELECT p.name
, COUNT(*) as `count`
FROM mytable_place x
LEFT JOIN place p
ON p.place_id = x.place_id
GROUP BY p.place_id
ORDER BY `count` DESC, p.name ASC
И они будут гораздо быстрее, чем любой запрос с использованием LIKE, так как они могут использовать индексы на столбцах, таких как place.name
.
Это может использовать некоторое форматирование кода ... http://stackoverflow.com/editing-help –
Я согласен с Джастином Этье. Но если вам нужно, загляните в функцию LOCATE http://dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_locate –