2016-03-04 3 views
0

у меня есть 3 различных запросов, которые в основном сортировать одинаковые результаты по различным параметрам, и я хотел бы MySQL, чтобы вернуть их результаты объединены в 3-х различных колонок:MySQL: Слияние 3 результатов запроса по столбцам

SELECT `text` AS `popular` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `hits` DESC LIMIT 10 
SELECT `text` AS `recent` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `datetime` DESC LIMIT 10 
SELECT `text` AS `matches` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `matches` DESC LIMIT 10 

Первый запрос возвращает это:

| popular | 
| A | 
| B | 
| C | 

Второй запрос возвращает это:

| recent | 
| B | 
| C | 
| A | 

Третий Цюй ERy возвращает это:

| matches | 
| C | 
| A | 
| B | 

Я хотел бы объединить эти результаты, так что я получаю это с помощью одного запроса:

| popular | recent | matches | 
| A | B | C | 
| B | C | A | 
| C | A | B | 

Это то, что я пытался до сих пор, но результат я получаю полностью перепутались.

SELECT * FROM 
    (SELECT `text` AS `popular` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `hits` DESC LIMIT 10) AS A 
    JOIN (SELECT `text` AS `recent` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `datetime` DESC LIMIT 10) AS B ON 1=1 
    JOIN (SELECT `text` AS `matches` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `matches` DESC LIMIT 10) AS C ON 1=1 
+0

Вы хотите, чтобы результаты, которые одинаковы в 3-х запросов быть в той же строке, или вы хотите просто объединить 3 запросов и получить всего 30 записей? Приведите пример, как выглядят ваши данные и что вы ожидаете от вывода. –

ответ

1

попробовать что-то вроде этого:

select t1.popular, t2.recent, t3.matches 
from  (SELECT @rownum1 := @rownum1 + 1 AS rank, `text` AS `popular` FROM `searches` t, (SELECT @rownum1 := 0) r WHERE `text` LIKE 'Tyr%' ORDER BY `hits`  DESC LIMIT 10) t1 
inner join (SELECT @rownum2 := @rownum2 + 1 AS rank, `text` AS `recent` FROM `searches` t, (SELECT @rownum2 := 0) r WHERE `text` LIKE 'Tyr%' ORDER BY `datetime` DESC LIMIT 10) t2 on t1.rank = t2.rank 
inner join (SELECT @rownum3 := @rownum3 + 1 AS rank, `text` AS `matches` FROM `searches` t, (SELECT @rownum3 := 0) r WHERE `text` LIKE 'Tyr%' ORDER BY `matches` DESC LIMIT 10) t3 on t2.rank = t3.rank 
-1

Вы можете использовать MySQL 'UNION statement', он может объединить более одного выберите и вернуть его в один выход. Так что попробуйте:

SELECT `text` AS `popular` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `hits` DESC LIMIT 10 UNION SELECT `text` AS `recent` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `datetime` DESC LIMIT 10 UNION SELECT `text` AS `matches` FROM `searches` WHERE `text` LIKE 'Tyr%' ORDER BY `matches` DESC LIMIT 10 
+0

Не считая того, что запрос возвращает ошибку из-за инструкции ORDER BY, это точно не то, что я ищу, поскольку я хочу вернуть 3 результата запроса, организованных в 3 столбца. –

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