2014-07-20 4 views
-1

Я хотел бы получить запрос sql для получения порядка результатов по столбцу текста, где id = 1 или 2 или 3. Сохраняя последовательность идентификаторов одинаковой. Надежда есть любая помощь на ниже:Группа MySQL перед заказом?

Мой Стол:

 
id record text 
1 1  Apple 
2 1  Fruits 
3 1  Nice 
1 2  Mango 
2 2  Fruits 
3 2  Moderate 
1 3  Car 
2 3  Vehicles 
3 3  Nice 

Планируемые результаты, если заказано по идентификатору = 1

 
id record text 
1 1  Apple 
2 1  Fruits 
3 1  Nice 
1 3  Car 
2 3  Vehicles 
3 3  Nice 
1 2  Mango 
2 2  Fruits 
3 2  Moderate 

или Планируемые результаты, если заказано по идентификатору = 2

 
id record text 
1 1  Apple 
2 1  Fruits 
3 1  Nice 
1 2  Mango 
2 2  Fruits 
3 2  Moderate 
1 3  Car 
2 3  Vehicles 
3 3  Nice 

или Предполагаемое повторное использование зультаты при заказе по идентификатору = 3

 
id record text 
1 2  Mango 
2 2  Fruits 
3 2  Moderate 
1 1  Apple 
2 1  Fruits 
3 1  Nice 
1 3  Car 
2 3  Vehicles 
3 3  Nice 
+1

Вы имеете в виду записи = 1!?!?!?! – Strawberry

+0

Я не уверен, что это запись вместо этого, если мы рассматриваем запись как целой набор записей, тогда да. Важно здесь иметь возможность сортировать по текстовому столбцу в соответствии с указанным идентификатором, а последовательность идентификаторов должна оставаться в последовательности. – sc79

+0

Извините. Я понятия не имею, о чем вы говорите. – Strawberry

ответ

1
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(id INT NOT NULL 
,record INT NOT NULL 
,text VARCHAR(12) NOT NULL 
,PRIMARY KEY(id,record) 
); 

INSERT INTO my_table VALUES 
(1 ,1  ,'Apple'), 
(2 ,1  ,'Fruits'), 
(3 ,1  ,'Nice'), 
(1 ,2  ,'Mango'), 
(2 ,2  ,'Fruits'), 
(3 ,2  ,'Moderate'), 
(1 ,3  ,'Car'), 
(2 ,3  ,'Vehicles'), 
(3 ,3  ,'Nice'); 

SELECT * FROM my_table; 
+----+--------+----------+ 
| id | record | text  | 
+----+--------+----------+ 
| 1 |  1 | Apple | 
| 1 |  2 | Mango | 
| 1 |  3 | Car  | 
| 2 |  1 | Fruits | 
| 2 |  2 | Fruits | 
| 2 |  3 | Vehicles | 
| 3 |  1 | Nice  | 
| 3 |  2 | Moderate | 
| 3 |  3 | Nice  | 
+----+--------+----------+ 

SELECT x.* 
    FROM my_table x 
    JOIN my_table y 
    ON y.record = x.record 
    AND y.id = 3 
ORDER 
    BY y.text 
    , x.record 
    , x.id; 
+----+--------+----------+ 
| id | record | text  | 
+----+--------+----------+ 
| 1 |  2 | Mango | 
| 2 |  2 | Fruits | 
| 3 |  2 | Moderate | 
| 1 |  1 | Apple | 
| 2 |  1 | Fruits | 
| 3 |  1 | Nice  | 
| 1 |  3 | Car  | 
| 2 |  3 | Vehicles | 
| 3 |  3 | Nice  | 
+----+--------+----------+ 
+0

Wow ... Спасибо ... Мне нужно когда-нибудь переварить ... Позвольте мне когда-нибудь и вернуться к вам ... – sc79

+0

Спасибо за отличный ответ GURU !!! Запрос настолько короткий и компактный, о котором я никогда не подумаю. – sc79

+0

+1. , , Я бы так не писал. Довольно умный. –

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