Как проверить, есть ли цифра в числе [MYSQL]

#mysql

#mysql

Вопрос:

У меня есть небольшая проблема. Я очень новичок в MYSQL и хочу проверить, есть ли конкретная цифра/число в другом номере. Небольшой пример:

(В этом примере он должен выбрать все из таблицы 1, у которого есть число, содержащееся в значении таблицы 2)

Таблица 1:

 id value 1 3 2 4 3 1 4 2  

Таблица 2:

 id2 values 1 13  

Результат:

Таблица 1

 id value 1 3  3 1  

(Потому что идентификаторы 1 и 3 имеют значение 3 и 1, которое содержится в числе 13)

Я надеюсь, что кто — нибудь сможет мне помочь. Это также было бы возможно, если бы существовал другой формат для 13, например «1,3», если это было бы проще. Прошу прощения за мой плохой английский. Я говорю по-немецки от рождения.

Комментарии:

1. Если символ '13' представляет собой a '1' и a '3' , но не числовое значение 13 , то хранить их в одном значении неправильно, даже хранить их в виде строк, разделенных запятыми, неправильно; всегда храните дискретные значения отдельно, а не объединять в строки. 1 И 3 должно быть либо в разных строках, либо в разных столбцах. Тогда SQL становится тривиальным; потому что тогда вы используете SQL так, как он разработан.

2. Я тоже так думал. Но проблема, с которой я столкнулся, заключается в том, что значение 13 зависит от пользователя. Затем я бы создал несколько строк с одним и тем же идентификатором пользователя или создал бесконечные столбцы. Поэтому его нужно хранить именно так. Неужели нет никакой возможности это сделать?

3. итак, если кто-то введет в таблицу 2 значение 1234 , вы хотите выбрать все строки из таблицы 1?

4. ДА. Вот чего я хочу. И если я введу 14, он должен отображать только идентификаторы 2 и 3

5. @silvinator Нет проблем с использованием нескольких строк так, как вы описываете. На самом деле, это стандартная практика в таблицах ссылок; все, что связывает одну сущность (пользователя) с несколькими сущностями (вашим значением), обычно делается таким образом. Существуют анти-шаблоны, которые делают это так, как вы предпочитаете, но они влекут за собой штрафы за производительность и техническое обслуживание, поэтому я лично отказываюсь обучать таким плохим практикам. (Перестаньте бороться с нормализованной структурой, присущей SQL, изучите ее, примите и поймите. Вера в то, что вы знаете лучше, приведет только к боли и трудностям.)

Ответ №1:

Я не согласен с тем, как вы храните данные, но сейчас вы можете выбрать данные следующим образом:

 SELECT * FROM table1 WHERE EXISTS (  SELECT *  FROM table2  WHERE table2.values LIKE CONCAT('%', table1.value, '%') )  

Как только вы нормализуете свою таблицу2, т. е. сохраните (13) в виде двух строк (1), (3) , можно будет использовать один и тот же запрос:

 SELECT * FROM table1 WHERE EXISTS (  SELECT *  FROM table2  WHERE table2.value = table1.value )  

Комментарии:

1. Это должно содержать предупреждения о том, почему это плохо. Например, влияние на производительность из-за невозможности использовать индексы.