Ответ Стюарта показывает вам, как получить сумму столбца, но я просто хочу отметить, что:
...WHERE drivers LIKE '%jill%'...
вернет любое событие с драйвером, имя которого содержит буквы «jill».
Во-вторых, этот дизайн базы данных не выглядит нормализованным. У вас есть имена водителей и маршруты повторяются. Если вы нормализуете базу данных и у вас есть что-то вроде:
участник
id | name | role
событие
id | date | route_id | description | executed
Маршрут
id | name | distance
participant_event
id | participant_id | event_id
тогда было бы намного легче работать с данными.
Тогда, если вы хотите реализовать поиск пользователей, вы можете сделать запрос:
SELECT id FROM participant WHERE
name LIKE '%jill%' AND
role='driver';
Затем, если запрос возвращает более одного результата, разрешите пользователю / приложению выбрать правильный драйвер , а затем запустите SELECT SUM
, как запрос Стюарта:
SELECT SUM(r.distance) FROM route r
JOIN event e ON e.route_id=r.id
JOIN participant_event pe ON e.id=pe.event_id
JOIN participant p ON pe.participant_id=p.id
WHERE p.id=?;
В противном случае единственный способ убедиться, что вы получаете только общее расстояние, пройденное одним драйвером, - это сделать что-то вроде этого (при условии, что drivers
разделен запятыми):
...WHERE LCASE(drivers)='jill' OR
drivers LIKE 'jill, %' OR
drivers LIKE '%, jill' OR
drivers LIKE '%, jill,%';