У меня есть таблица вроде:
id name children 1 Roberto Michael,Dia 2 Maria John,Alex 3 Mary Alexandre,Diana
Моя проблема; Я хочу найти, у кого есть ребенок по имени Алекс.
Я не могу использовать "where children = 'Alex'"
в SQL, потому что у меня есть несколько имен в одних и тех же ячейках.
Поэтому я использую "where children LIKE '%Alex%'"
– это выглядит умным, но в то же время я все начинаю как Alex 🙁 Alexandre или я хочу получить диагноз, но результат – dia и diana 🙁
как я могу получить одиночный Alex в этом типе данных?
Надеюсь, я могу объяснить свою проблему своим ужасным английским: D
Лучшим решением будет нормализация вашей схемы. У вас должна быть отдельная таблица с одной строкой для каждого дочернего элемента вместо списка с разделителями-запятыми. Затем вы можете присоединиться к этой таблице, чтобы найти родителя с определенным дочерним элементом. См. Ответ @ themite для примера этого.
Но если вы не можете сделать это по какой-либо причине, вы можете использовать FIND_IN_SET
:
WHERE FIND_IN_SET('Alex', children)
Вы должны разделить данные на две таблицы.
первый будет выглядеть так
ID Name 1 Roberto 2 Maria 3 Mary
И второй, как этот
ParentId child 1 Michael 1 Dia 2 John 2 Alex
и так далее.
то вы можете сделать запрос, который вы хотите, не беспокоясь о том, like
и ваши данные гораздо более полезны
Вот почему вы хотите иметь две таблицы здесь.
parents: id name 1 Roberto 2 Maria 3 Mary children: id parentid name 1 1 Michael 2 1 Dia 3 2 John 4 2 Alex 5 3 Alexandre 6 3 Diana
И теперь вы можете запросить это гораздо более эффективно с помощью соединения или существующего:
SELECT * FROM Parents WHERE EXISTS( SELECT * FROM Children WHERE parentid=Parents.id AND Children.name='Alex' )
Я предпочел бы сделать разные таблицы для детей и родителей примерно такими.
Стол для родителей
parent_id name 1 Roberto 2 Maria 3 Mary
Стол для детей
children_id parent_id name 1 1 Michael 2 1 Dia 3 2 John
…. и так далее