2016-08-15 5 views
0

Я нашел много примеров PHP, которые используют map и implode, чтобы структурировать их строку ... Я использую Node и Javascript, и я думаю, что это может быть проблемой. У меня есть массив идентификаторов и я экономлю это так:MySQL выбирает значения из одной таблицы на основе массива идентификаторов из другой таблицы

[1, 2, 3, 4].join(); 

Вот хранится, и я пытаюсь выполнить запрос:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (st.ids); 

Таким образом, обе таблицы имеют столбец город, table2 с несколькими записями, table1 имеет только один. Столбец «идентификаторы» имеет тип TEXT в таблице 2. Проблема в том, что это только возврат строки с идентификатором 1. Если я это сделаю:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND sr.id IN (1,2); 

Я получу строки 1 и 2. Что вызывает проблему? Я пробовал [1, 2, 3, 4].join(', ');, и это не помогло. Какие-либо предложения?

+0

y тег javascript? – Iceman

+0

@Iceman, потому что я использую Node.js и изменяю значение с помощью Javascript перед его сохранением. – denikov

+0

Первое предложение не хранит конкатенированные строки, которые вы хотите присоединить/использовать в запросе, как будто это создает боль! Затем, если вы собираетесь это сделать, в любом случае просмотрите методы разделенной строки, чтобы разделить строку на таблицу, а затем сделать соединение, а не в. Если вы не хотите делать разделяемую строку, вы можете подделать ее с помощью поиска подстановочных знаков, но это имеет огромные потенциальные проблемы, а затем вы также можете перейти по динамическому пути sql. Все методы предлагают Не хранить конкатенированные строки, если вы будете использовать их для целей, подобных этому. – Matt

ответ

0

Я использую MySQL v5.7, поэтому у меня есть доступ к функциям JSON ... Я должен был использовать это в первую очередь. Решение, которое работает, как я хотел это:

SELECT sr.id, sr.name, sr.city FROM table1 AS sr 
JOIN table2 AS st WHERE sr.city = st.city AND 
JSON_SEARCH(st.ids, 'one', sr.id) IS NOT NULL; 

Любовь новая функция поддержки JSON ... Altho он идет со своими оговорками. Например, идентификаторы в массиве должны быть строками, идентификаторы не могут быть int. JSON_SEARCH продолжал возвращать NULL для путей к идентификаторам, пока я не преобразовал их в строки. Пробные и ошибки ...

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