2016-11-19 2 views
0

У меня есть таблица, как показано нижеКак выбрать подходящую строку в mysql?

+--------+---------+------------------------------------+ 
| Id | Name |    DataID    | 
+--------+---------+------------------------------------+ 
| 1 | xyz |  111,222,333,444    | 
| 2 | xxz |  555,666,777     | 
| 3 | xyx |  888,999,000,001    | 
| 4 | yyz |  010,011,100,200    | 
| 5 | xyy |  600,500,400,300,555   | 
| 6 | yyy |  111,700,800,900    | 
| 7 | zyz |  050,0150,025,550,950,888  | 
| 8 | xzz |  800,786      | 
| 
| 
| 
| 1123 | aaa |  111,444,666,888    | 
| 1124 | bbb |  889,998,777     | 
+--------+---------+------------------------------------+ 

, а также имея некоторый список DataID = (786,333,500,777). Итак, теперь я хочу проверить этот список с помощью столбца DataID. Например, теперь строка 8 имеет 786 в столбце DataID, а в строке 1 - 333, строка 5 имеет 500, строка 1124 & 2 имеет 777. Теперь я хочу получить эти записи в качестве вывода. Точно так же, как указано ниже. Пожалуйста, помогите мне на этом, извините, если мой плохой английский, и если мой вопрос был очень прост. Но, пожалуйста, помогите кому-нибудь. Ожидая выход как ниже

+--------+---------+------------------------------------+ 
| Id | Name |    DataID    | 
+--------+---------+------------------------------------+ 
| 1 | xyz |  111,222,333,444    | 
| 2 | xxz |  555,666,777     | 
| 5 | xyy |  600,500,400,300,555   | 
| 8 | xzz |  800,786      | 
| 1124 | bbb |  889,998,777     | 
+--------+---------+------------------------------------+ 

Благодарность

+3

Итак, вы сообщаете нам, что каждая строка имеет более одного значения данных, встроенного в поле DataID, как данные, разделенные запятой? Это не очень хороший дизайн. –

+0

Согласитесь, но у меня нет параметров сейчас, кроме этого, это для некоторых отчетов и анализа, которые я задаю. Таблица уже в разделе «Производство не может измениться» – Munna

+0

В этом случае не беспокойтесь о РСУБД. Сделайте что-нибудь еще. – Strawberry

ответ

1

Попробуйте это:

SELECT name FROM table WHERE FIND_IN_SET('777', DataID) 

Это должно вернуть XXZ и ГЭБ

согласен с комментатором выше, это не является хорошим способом для обработки данных ,

+0

Можно ли все застрелить? Что-то вроде этого -> SELECT name FROM table WHERE FIND_IN_SET ('786,333,57,777', DataID), чтобы получить все соответствующие строки, только что показанные под вопросом – Munna

1

Обычно не добавлял другого ответа, но вы задавали другой вопрос по подобному вопросу.

Если вы хотите, вы можете сделать это:

SELECT name FROM table WHERE CONCAT(',', DataID, ',') REGEXP ',(222|777|400),' 

, и вы получите обратно АБВ XXZ, XYY, БББ

Я сомневаюсь, что кто бы считать это оптимальным, но это будет делайте то, что вы просите.

Смежные вопросы