2013-12-24 10 views
0

У меня есть следующий SQL заявление:ORDER/LIMIT на определенном столбце в РЕГИСТРИРУЙТЕСЬ

SELECT e.comment_id AS parentcomment, 
m.comment_id AS child_id 
FROM comments e 
INNER JOIN comments m 
ON e.comment_id=m.parent_id 
WHERE e.parent='1' AND e.parent_id='$parentid' AND m.parent='0'; 

Пример вывода:

+---------------+----------+ 
| parentcomment | child_id | 
+---------------+----------+ 
|    1 |  3 | 
|    1 |  4 | 
|    1 |  7 | 
|    5 |  8 | 
|    1 |  9 | 
|    1 |  10 | 
|    1 |  11 | 
|    1 |  12 | 
|    1 |  13 | 
|    1 |  14 | 
|    1 |  15 | 
|    1 |  16 | 
|    1 |  17 | 
|    1 |  18 | 
|    1 |  19 | 
|    1 |  20 | 
|    1 |  21 | 
|    1 |  22 | 
|    1 |  23 | 
|    1 |  24 | 
|    1 |  25 | 
|   26 |  32 | 
|   26 |  33 | 
|   27 |  34 | 
|   27 |  35 | 
|   28 |  36 | 
|   29 |  37 | 
|   30 |  38 | 
|   31 |  39 | 
|   26 |  40 | 
+---------------+----------+ 
30 rows in set 

То, что я хочу сделать - я только хочу показать 15 child_id значения каждый parentcomment значение. В дополнение к этому, я хочу только получить 30 parentcomment значений, которые будут получены.

Кроме того, я хочу ORDER в parentcomment значения от определенного индекса (скажем id) и выбрать только топ-30, а затем выбрать 15 лучших из упорядоченных child_id значений (также заказанные id).

Надеюсь, что это имеет смысл. Как мне это делать?

Заранее спасибо.

+0

Вы можете предоставить образцы данных и желаемый результат? например, возможно, вместо 15 child_id, попробуйте 3 или что-то меньшее, а вместо 30 parentcomment попробуйте что-то вроде 2 parentcomment и предоставите образцы данных. Затем, как только у вас будет такая работа, чтобы изменить число до 15 child_id и 30 parentcomment, должно быть легко. Я не уверен, если вы имеете в виду 30 строк или 30 уникальных копий, которые, возможно, (30x15) строк –

ответ

1

вы должны быть в состоянии работать с этим (sqlFiddle) здесь я только захватывая 3 (вместо 15) child_ и 6 (вместо 30) parentcomment

и в моем примере $parentid является 1. Самый внутренний запрос - это ваш первоначальный запрос, только что добавленный ORDER BY parentcomment,child_id

SELECT parentcomment,child_id,parentRank,childRank 
FROM 
    (SELECT parentcomment, 
      child_id, 
      IF (@prevparent <> parentcomment, @parentRank:[email protected]+1, @parentRank) as parentRank, 
      IF (@prevparent <> parentcomment, @childRank:=1, @childRank:[email protected]+1) as childRank, 
      @prevparent := parentcomment 
    FROM 
     (SELECT e.comment_id AS parentcomment, 
       m.comment_id AS child_id 
     FROM comments e 
     INNER JOIN comments m 
     ON e.comment_id=m.parent_id 
     WHERE e.parent='1' AND e.parent_id='1' AND m.parent='0' 

      ORDER BY parentcomment,child_id 
     )T1, 
     (SELECT @prevparent:=0,@parentRank:=0,@childRank:=0)rank 
    )T2 
WHERE parentRank BETWEEN 1 AND 6 
AND childRank BETWEEN 1 AND 3 
+0

Wow! Потрясающие! Именно то, что мне нужно. Благодаря! – Shahar

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