2013-05-11 3 views
2

SQL yapısıНаверх Комментарий Sql

Существует проблема с моим запросом MySql. Не могли бы вы мне помочь?

У меня есть база данных, как на рисунке выше, и есть идентификаторы пользователей, которые принадлежат каждому пользователю. Он должен быть отсортирован по типу по убыванию. Он записывает время с помощью функции PHP time(), которая записывается в этот момент в ячейке datetime в базе данных. Однако SQL-запрос, который я использовал дает мне результат, как на картинке ниже:

SELECT 
    user.username, 
    kim.userid, 
    kim.subject, 
    count(kim.userid), 
    max(kim.dateline), 
    max(kim.rateid) 
FROM test as kim 
INNER JOIN user 
WHERE user.userid = kim.userid 
GROUP BY kim.userid limit 10) 

enter image description here

Хотя я получить правильные результаты, я все еще с небольшой проблемой, так как rateid не показать правильный предмет. Итак, я искал его в течение двух дней, и я думаю, что есть проблема, которую я не понимаю или не вижу.

Право запрос должен быть как на в следующей картине: enter image description here

Я ценю, если вы поможете!

ответ

0

попробовать этот

Select user.username, kim.userid ,kim.subject, count(kim.userid), max(kim.dateline), 
max(kim.rateid) 
from test as kim 
left join user ON user.userid = kim.userid group by kim.userid limit 10 
+0

не работают на этот вопрос – pirpirim

+0

@ CihanÖĞÜT хорошо, я думаю, проблема rateID. у вас есть mutliple комментарии на том же ID пользователя. Если rateid является внешним ключом? Если да, вы можете опубликовать таблицу здесь – Yogus

1

Вы пытаетесь получить информацию от линии, которая имеет максимальную rateid, наряду с агрегированной информацией. Для этого вам нужно зарегистрироваться вернуться к исходной таблице:

select kim.userid, u.username, kim.cnt, kim.maxdate, kim.maxrate, t.subject 
from (SELECT kim.userid, count(kim.userid) as cnt, 
      max(kim.dateline) as maxdate, max(kim.rateid) as maxrate 
    FROM test kim 
    GROUP BY kim.userid 
    limit 10 
    ) kim INNER JOIN 
    user u 
    on u.userid = kim.userid join 
    test t 
    on kim.userid = t.userid and 
     kim.maxrate = t.rateid 

Это находит Maxrate для каждого пользователя, а затем присоединяется к столу, чтобы получить предмет для этой скорости. Ваш столбец maxdate кажется тем, что вы хотите. Если вам нужна дата для maxrate, вы также можете взять ее с t.

+0

Когда я использую этот sql-запрос, у меня есть сообщение об ошибке, то есть MySQL: # 1054 - Неизвестный столбец «kim.rateid» в разделе «on» – pirpirim

0

Спасибо за внимание,

я нашел решение моей проблемы. Решение должно быть так:

 
SELECT subject FROM test WHERE 
userid=user.userid ORDER BY dateline desc LIMIT 1) 
AS subject, 
(SELECT COUNT(*) FROM test 
WHERE userid=user.userid) AS adet 
FROM user limit 10 
Смежные вопросы