У меня есть база данных, которая настраивается следующим образом.
id coach team event status
14 test 8,7,12,13,15 4,1,2,14,4 2
13 test 8,12,13,14,15,16 1,2,8,16,16 3
Что мне нужно сделать, это поиск строк, где первое число в столбце "событие" соответствует запросу. Они разделяются запятыми, но могут быть 1 или 2 или 3 цифры. Я уверен, что это возможно, просто не уверен, как и с чего начать.
Это выберет все строки, где первое число в событии равно 1:
SELECT * FROM `tableName` WHERE event LIKE '1,%';
Рассматривали ли вы нормализацию своей базы данных? Не больно ли работать с базой данных, в которой поле может содержать произвольное количество произвольно отформатированных значений? Как побочный эффект (ха-ха), он решит проблему, описанную в вашем вопросе.
Пример схемы базы данных:
create table whatever (
id int not null auto_increment primary key,
coach varchar(64),
status int
)
create table teams (
id int not null auto_increment primary key,
name varchar(255)
)
create table events (
id int not null auto_increment primary key,
name varchar(255)
)
create table whatever_teams (
id int not null auto_increment primary key,
whatever_id int,
team_id int
)
create table whatever_events (
id int not null auto_increment primary key,
whatever_id int,
event_id int
)
Я хочу заранее извиниться за очевидный недостаток кода с поддержкой sql-injection, который всегда можно найти в вопросах и ответах под тегами "php" и "mysql".
Вам будет лучше, изменив схему базы данных. Сохранение полей со списками идентификаторов не очень удобно.
Сделайте дополнительные вкладки, чтобы сделать ссылки. Например:
coach_team
id coach_id team_id
1 14 7
2 14 8
3 14 12
4 14 13
Чем вы можете использовать такие запросы, как:
SELECT * FROM table_name WHERE id in
(SELECT coach_id FROM coach_team WHERE team_id = 1)
(Это, конечно, также относится к событиям.
Дополнительная информация: http://en.wikipedia.org/wiki/Database_normalization
Вы можете использовать SUBSTRING_INDEX, чтобы получить первое значение, что-то вроде этого:
SELECT * FROM table_name WHERE SUBSTRING_INDEX( event, ',', 1 ) = 'value'
При таком подходе вы можете использовать подготовленный оператор с заполнителем для значения поиска. Также отлично работает, если в столбце событий есть только одно число, т.е. Никакие запятые не соответствуют друг другу.
Я настоятельно рекомендую вам изменить схему базы данных, потому что, по моему опыту, рано или поздно вы должны изменить ее, чтобы удовлетворить все ваши потребности в будущем. Должно сделать это сейчас be4 слишком поздно
$sql = "SELECT * FROM table_name WHERE event LIKE '" . $query . "',%'";