2016-02-04 3 views
0

Я следующую структуру в после таблицы (пример):Выберите различные результаты из той же таблицы

id | id_author | content | date | ft 
1 | 1   | hi!  | 2016 | 2 
2 | 1   | hello! | 2016 | 3 
3 | 1   | welcome | 2016 | 1 
4 | 1   | test! | 2016 | 2 

и Я query:

SELECT id, id_author, content, date, ft FROM post where id_author = '$author' ORDER BY id DESC LIMIT 7 

Но, также необходимо, чтобы select сообщений с соответствующими ft с LIMIT 4. Как это:

SELECT id, id_author, content, date, ft FROM post where id_author = '$author' and ft = 1 ORDER BY id DESC LIMIT 4 

SELECT id, id_author, content, date, ft FROM post where id_author = '$author' and ft = 2 ORDER BY id DESC LIMIT 4 

SELECT id, id_author, content, date, ft FROM post where id_author = '$author' and ft = 3 ORDER BY id DESC LIMIT 4 

я мог сделать «фильтр» в ft с foreach, например:

foreach($query as $ex) { 
    switch($ex["ft"]) { 
     ... 
    } 
} 

Но, мой первый query нужно иметь LIMIT 7 и querys realtives в ft необходимости чтобы выбрать последние 4 результатов из все сообщений.

Как это сделать, не делая кратных querys?

EDIT:

Мне нужно, чтобы показать последние 7 сообщений (общие) в одном div, последние 4 сообщения с изображениями (ft = 1) в другом div, последние 4 сообщения с упоминаниями (ft = 2) в другой div и последние 4 сообщения с hashtags (ft = 3) в другом div.

+1

Что делать, если вы используете предложение 'IN'? Например: SELECT id, id_author, content, date, ft FROM post, где id_author = '$ author' и ft IN {1,2,3} ORDER BY id DESC LIMIT 4' Это то, что вы хотите? Дай мне знать. –

+2

Укажите ожидаемый результат. –

+1

Database engine =? – trincot

ответ

1

Вы можете сделать это с помощью оператора UNION.

SELECT 
    'General' AS post_type, 
    id, 
    id_author, 
    content, 
    date, 
    ft 
FROM 
    Post 
WHERE 
    id_author = '$author' 
ORDER BY 
    id DESC 
LIMIT 7 
UNION ALL 
SELECT 
    'Image' AS post_type, 
    id, 
    id_author, 
    content, 
    date, 
    ft 
FROM 
    Post 
WHERE 
    id_author = '$author' AND 
    ft = 1 
ORDER BY 
    id DESC 
LIMIT 4 
UNION ALL 
SELECT 
    'Mentions' AS post_type, 
    id, 
    id_author, 
    content, 
    date, 
    ft 
FROM 
    Post 
WHERE 
    id_author = '$author' AND 
    ft = 2 
ORDER BY 
    id DESC 
LIMIT 4 
UNION ALL 
SELECT 
    'Hashtags' AS post_type, 
    id, 
    id_author, 
    content, 
    date, 
    ft 
FROM 
    Post 
WHERE 
    id_author = '$author' AND 
    ft = 3 
ORDER BY 
    id DESC 
LIMIT 4 
Смежные вопросы