2013-11-08 2 views
0

У меня есть Тхо следующий запрос MySQL:включают дубликаты при использовании WHERE IN

$sql = ' SELECT tableA.id, tableA.title 
     FROM tableA 
     JOIN tableB ON tableA.id = tableB.land_id 
     WHERE tableB.id IN ('.$idlist.')'; 

Проблема мне нужно также включать дубликаты от $ список_идентификаторов. WHERE IN возвращает только уникальные совпадения $idlist. Таким образом, каждая переменная в idlist должна возвращать соответствующий идентификатор и заголовок из tableA.

+0

Что содержит $ idlist? (это строка с несколькими идентификаторами, разделенная символом ',' или что-то еще? – ModulusJoe

ответ

1

A WHERE Состояние оценивает каждую запись с условием. Он просматривает данные в базе данных и запрашивает каждую строку «это рекорд IN (...). Затем он возвращает только записи, которые соответствуют этому фильтрам. Вы можете легко обработать возвращенные данные в PHP и дублировать все, что вам нужно, чтобы дублировать, это было бы наиболее эффективным способом. База данных не должна возвращать одни и те же данные дважды, вы можете дублировать данные самостоятельно на PHP, если это необходимо.

Если вам нужна база данных, чтобы возвращать повторяющиеся строки, вы в значительной степени должны сами конкатенировать отдельные запросы в набор записей. Вместо одного запроса ... WHERE `foo` IN ('a', 'b', 'c', 'a') вам необходимо выдать несколько объединенных запросов:

SELECT ... WHERE foo = 'a' 
UNION 
SELECT ... WHERE foo = 'b' 
UNION 
SELECT ... WHERE foo = 'c' 
UNION 
SELECT ... WHERE foo = 'a' 
+0

Зачем нужно загружать запись с 'foo = 'a'' дважды? Если эта запись находится в результате один раз, вы можете прочитать ее оттуда как Часто, как вы хотите. Записи должны быть идентичными, поскольку предложение WHERE идентично. Насколько я понял, вы просто загружаете ненужные данные. – feeela

+0

Обратите внимание, что я говорю именно это очень подробно в первом абзаце. – deceze

+0

Хорошо, но список idlist может составлять до 150 строк, это не замедлит кучи запросов. Я hav enow решил его временно, перейдя по запросу. Однако это, конечно, заканчивает выполнение запроса для каждого элемента, который затем может быть до 150 запросов. Не уверен, что вы имеете в виду после обработки данных. – stomperDev

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