2013-10-10 6 views
0

При использовании где в запросе, такие как ...Где в MySQL Query

SELECT 
ID, A, T 
FROM `table1`    
WHERE (A,T)    
IN ($query) 

Есть ли способ, чтобы получить результат в том же порядке, как ваш запрос?

Так что, если $ запрос был ("Дэвид Крок", "Большие черепков"), ("Энни Смит", "Моя жизнь")

результат упорядочивается

342 David Crock Big Crocks 
12 Annie Smith My Life 
+0

Существует предложение «ORDER BY», но, как правило, базы данных НЕ гарантируют, сохраните порядок, в который были вставлены данные, если вы не примете меры для добавления некоторых метаданных, чтобы указать, что вы заказываете себя. –

+0

Скорее всего, он будет искать сверху вниз от первого первичного ключа до последнего. Поэтому, если ваш первичный ключ - это идентификатор, он, вероятно, отобразит результаты таким образом. Я думаю, как сказал @MarcB B, используя порядок, это ваш лучший способ контролировать сортировку. –

ответ

1

Обычно вам должны делать это сопоставление на прикладном уровне, это единственное место, где у вас есть вся соответствующая информация. Его можно отсортировать в правильном порядке, используя таблицу TEMPORARY, но этого лучше избегать.

+0

Да, это картография, которая меня отключила. У меня есть php-массив записей, которые я сопоставляю с выбранными данными, но акценты нарушают вещи. Если я сделаю выбор для «Monae» и «Monãe» в таблице, он попадает. Тогда «Monãe» не будет соответствовать «Monae» в моем приложении, так что это терпит неудачу. – Shaun

+0

Вы хотите, чтобы они соответствовали или нет? – tadman

+1

Два сценария - я хочу, чтобы они соответствовали, когда люди используют приложение, то есть Monae попадет на Monãe и т. Д., Но я не хочу, чтобы они соответствовали, когда создаются записи, так как мне нужны отдельные записи для Monãe и Monae - так что я может запросить db для идентификатора записи, который будет использоваться при дальнейшем анализе. В настоящее время, если Monãe там, Monae не будет создан, вместо этого извлекаются данные id и row для Monãe, и когда мой сценарий загрузки ищет Monãe в массиве php для добавления идентификатора, он не может его найти (поскольку Monae находится в массиве). У меня есть обходное решение для php, но скорее рассмотрю его на уровне базы данных. – Shaun

2

Если $ query - инструкция SELECT, тогда вместо этого выполните объединение.

Если это набор буквенных значений, то либо вставить их во временную таблицу с некоторым упорядочением, такими как автоинкрементный идентификатор и сделать присоединиться + заказ на или ...

SELECT 
ID, A, T 
FROM `table1`    
WHERE A    
IN ('David Crock', 'Annie Smith') 
ORDER BY LOCATE(A, 'David Crock,Annie Smith'); 

(извинит - Я не сталкивался с многозначным заявлением «IN», прежде чем, следовательно, не знаю, как это работает - работает ли оно?)

+1

Спасибо, ребята. Да, symcbean - многозначные инструкции IN работают очень хорошо. Мое приложение выбирает до 5000 записей за один раз таким образом - я обнаружил, что это самый быстрый способ выбрать несколько конкретных записей. – Shaun