2013-09-18 4 views
1

У меня возникли проблемы с запросом MySQL Заказать.Заказ MySQL по альтернативным значениям

Сначала у меня есть таблица (tbl_records), которая содержит 10000+ записей. В этой таблице есть первичный ключ rec_id и внешний ключ rec_f_id.

rec_f_id имеет только два вида стоимости (555, 666).

Теперь моя проблема заключается в том, как я могу собрать записи в таблице, которые заказывают альтернативное значение rec_f_id.

Например

Ниже фиктивный TBL записи

| rec_id | rec_f_id | 
|2   |666   | 
|3   |555   | 
|7   |555   | 
|8   |666   | 
|9   |555   | 
|12  |666   | 
|25  |555   | 
|31  |555   | 
|84  |666   | 
|89  |555   | 
|91  |555   | 
|92  |666   | 
|113  |666   | 
|118  |666   | 
|125  |555   | 
|132  |555   | 
|170  |555   | 
|184  |666   | 


SELECT * FROM tbl_records ORDER BY FIELD(rec_f_id, 555, 666) LIMIT 100; 

Этот запрос возвращает только записи с rec_f_id = 555. То, что я хочу, чтобы это

| rec_id | rec_f_id | 
|31  |555   | 
|12  |666   | 
|3   |555   | 
|8   |666   | 
|25  |555   | 
|2   |666   | 
|7   |555   | 
|84  |666   | 
|9   |555   | 

... 

Спасибо!

+2

Может вы не просто заказ по 'rec_id'? Можете ли вы предоставить данные реальных образцов? – user2480596

+0

Почему вы не заказываете только rec_id? – cha

+0

@ user2480596 запись выше - это только фиктивная запись. – sephoy08

ответ

0

Вот один вариант использования user-defined variables. В основном это создает Row Number в группе, а затем заказы от него вместе с rec_f_id поле:

SELECT rec_id, rec_f_id 
FROM (
    SELECT rec_id, rec_f_id, 
    @rn:=IF(@prev=rec_f_id,@rn+1,1) rn, 
    @prev:=rec_f_id 
    FROM tbl_records 
    JOIN (SELECT @rn:=0, @prev:=0) t 
    ORDER BY rec_f_id 
) t 
ORDER BY rn, rec_f_id 
+0

Привет, Спасибо. Это замечательно, что я абсолютно согласен с моей проблемой. Единственная нижняя сторона заключается в том, что запрос занимает слишком много времени. – sephoy08

0

попробовать:

SELECT * FROM tbl_records 
WHERE rec_f_id in (555,666) 
ORDER BY rec_id, rec_f_id, 
LIMIT 100; 
+0

Привет, извините, это не то, что я имел в виду. Я хочу получить записи в альтернативных строках в зависимости от значения rec_f_id. rec_id не имеет такой последовательности. – sephoy08

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