2011-01-28 5 views
0

У меня есть оператор выбора возвращающегося 5 столбцов:Сортировка несколько результатов запроса в одном запросе

select col1,col2,col3,col4,col5 from table1; 

col1 col2 col3 col4 col5 
9  A B C D 
8  E F G H 

У меня есть еще один оператор выбора из table2, который возвращает col1 в одиночку;

col1 
8 
9 

на основе двух отдельных запросов, есть способ, чтобы написать один запрос на выборку, чтобы вернуть результат как:

col1 col2 col3 col4 col5 
    8  E F G H 
    9  A B C D 

то есть. в основном сортировать вывод I-запроса на основе col1 из запроса II. (Это в Mysql)

PS: II таблица column1 используется для сортировки &, что приходит из таблицы 2. col1 TABLE2 не статична, его изменения для каждого действия пользователя & на основе вызова я получит col1 из таблица 2 & необходимо сортировать с выходом table1.

+0

Обновите вопрос, чтобы продемонстрировать, как включена таблица 2, потому что пример довольно ясен, иначе таблица 2 не используется. –

+0

У вас есть screen1, где вы можете перемещать сетки на странице, grid1, grid2, grid3 и т. Д. Их порядок сортировки сохраняется в таблице2, где, поскольку tabel1 возвращает информацию о сетках, которые должны отображаться в том, какие сетки заказов хранятся в таблице2. – Sharpeye500

+0

Это две совершенно отдельные таблицы? Является ли Col1 в таблице 1 и таблице 2 точно такой же? –

ответ

0

Для этого, чтобы работать, вы seriously нужен sort колонку на table2. Просто наличие идентификаторов в таблице 2 недостаточно. У вас могут быть записи 7,8,9, а затем удалить 8 и добавить их обратно. Но нет, это не order это как 7,9,8. Возможно, временно, если в таблице нет первичного ключа, но когда таблица становится большой, даже этот «неявный» порядок теряется.

Итак, если у вас есть такой столбец сортировки

Table2 
Sort, Col1 
1, 9 
2, 8 

Ваш запрос становится

SELECT a.* 
FROM table1 a 
INNER JOIN table2 b ON a.col1 = b.col1 
ORDER BY b.sort ASC 

Если вы все еще хотите полагаться на MySQL недокументированных функций или, как он в настоящее время работает, то вы можете попробовать это.

# test tables 
create table table1 (col1 int, col2 int, col3 int); 
insert table1 select 8, 1,2; # in this order 
insert table1 select 9, 3,4; 

create table table2 (col1 int); 
insert table2 select 9; # in this order 
insert table2 select 8; 

# select 
SELECT a.* 
FROM table1 a 
INNER JOIN table2 b ON a.col1 = b.col1 

----output---- 
col1 col2 col3 
9  3  4 
8  1  2 

Это работает по крайней мере, для небольших таблиц, только потому, что размер (table2) < размера (table1), поэтому он собирает в таком порядке, сохраняя FileSort на table2.col1.

1

Используйте ORDER BY:

SELECT col1,col2,col3,col4,col5 
    FROM table1 
ORDER BY col1 

По умолчанию ORDER BY является ASC.

SELECT col1,col2,col3,col4,col5 
    FROM table1 
ORDER BY col1 DESC 

... будет положить 9 из col1 в качестве первой записи.

+0

@OMG Ponies - Извините, столбец таблицы 1 используется для сортировки, и это происходит из таблицы 2. Table1 col1 не является статическим, его изменение для каждого действия пользователя и на основе вызова я получаю столбец таблицы 2 и нужно сортировать с выходом таблицы1. – Sharpeye500

+0

Значение col1 II таблицы будет динамическим, для одного входа это будет 8,9, следующий логин будет иметь идентификаторы 11,10 в порядке сортировки. Поэтому, если запрос I возвращает порядок 10,11, тогда мне нужно вернуть результат как 11,10. – Sharpeye500

+0

Sharpeye500: Это противоположность вашему оригинальному примеру, если col1 должен быть DESCending sort на основе значений col1. Это не может быть и то, и другое. –

0

Не уверен, что отношения между t1.col1 и t2.col2. Вероятно, ищет что-то вроде этого, хотя:

SELECT t2.col1, t1.col2, t1.col3, t1.col4, t1.col5 
    FROM table2 t2 
INNER JOIN table1 t1 ON t1.col1 = t2.col1 
ORDER BY t2.col1 ASC 
Смежные вопросы