У меня небольшая проблема с запросом php mysql, я ищу помощь.mysql like query exclude numbers
У меня есть таблица древовидного дерева, где я храню для каждого человека идентификатор его/ее предков, разделенный запятой. как так
id ancestors
10 1,3,4,5
Так человек ид 10 порожден идентификатором 5, который порожден идентификатором 4, который усыновил на 3 и т.д. ...
Теперь я хочу, чтобы выбрать все человек, которые имеют идентификатор x у их предков, поэтому запрос будет примерно таким: выберите * от людей, где такие предки, как «% x%»
Теперь это будет работать отлично, за исключением того, что если id x позволяет сказать 2, а запись имеет id предка 32, этот запрос будет извлекать 32, потому что 32 содержит 2. И если я использую «%, x,%» (включая запятые), запрос будет игнорировать записи, чей предок x находится на любом ребре (слева или справа) столбца. Он также будет игнорировать записи, чей х является единственным предком, поскольку никакие запятые не присутствуют.
Итак, вкратце, мне нужен запрос, который ищет выражение, которое либо окружено запятыми, либо не окружено чем-либо. Или запрос, который получает регулярное выражение при условии, что вокруг нет чисел. И мне это нужно как можно эффективнее (я сосать при написании регулярных выражений)
Спасибо.
Редактировать: Хорошо, ребята, помогите мне придумать лучшую схему.
Вы столкнулись с плохим дизайном базы данных. Вы никогда не сможете заставить это работать последовательно или легко запросить. Вам нужно остановиться и сделать некоторое чтение о том, как создать отношения один-много, используя реляционную базу данных. Просто сделайте google и искупайтесь в полученных знаниях – RiggsFolly
Вы должны прочитать это: http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that- bad –
Я знаю об одном для многих. И обычно я бы сохранил для каждой записи его непосредственную родительскую запись. Однако, если я хочу получить всех детей и внуков для данной записи, используя один запрос, как мне это сделать? Я не хочу извлекать детей, а затем делать отдельный запрос для своих детей, я думал, что я сделаю один запрос и заберу все. –