ОПРЕДЕЛИТЬ столбец в базе данных - PullRequest
1 голос
/ 09 марта 2010

Я пытаюсь выполнить предложение DISTINCT для запроса, подобного этому

SELECT DISTINCT username, wiki.text, wiki.date
FROM wiki_house
INNER JOIN wiki ON wiki_house.wiki_id = wiki.id
INNER JOIN users ON wiki.user_id = users.id
AND wiki_house.house_id = 1
AND wiki.language = 'it'
ORDER BY wiki.date DESC
LIMIT 10

это возвращает:

username     wiki.text     wiki.date
mike         Hello         2010-03-09
mike         Helo          2010-03-08
kim          Whats...      2010-03-07
mike         When in...    2010-03-06
eddy         Hel           2010-03-05

Я думал, что этот запрос должен возвращать последние 10 вики из разных имен пользователей в соответствии с предложением DISTINCT, но он просто возвращает мне последние 10 результатов, поэтому, если пользователь написал 2 версии своей вики, они отображаются в страница.

Как я могу выбрать только последние 10 вики из разных имен пользователей, что-то вроде этого?

username     wiki.text     wiki.date
mike         Hello         2010-03-09
kim          Whats...      2010-03-07  
eddy         Hel           2010-03-05

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

Это должно быть возможно при использовании подзапроса. Внутренний запрос упорядочивает все строки по дате, поэтому первым экземпляром каждого имени пользователя в этом результате будет искомая строка.

Внешние группы запросов по имени пользователя и AFAIK, если вы не используете GROUP_CONCAT, это всегда будет принимать первый экземпляр каждой строки, содержащей имя пользователя.

SELECT username, wikitext, wikidate FROM
  (SELECT username, wiki.text AS wikitext, wiki.date AS wikidate
  FROM wiki_house
  INNER JOIN wiki ON wiki_house.wiki_id = wiki.id
  INNER JOIN users ON wiki.user_id = users.id
  AND wiki_house.house_id = 1
  AND wiki.language = 'it'
  ORDER BY wiki.date DESC)
GROUP BY username
LIMIT 10

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

1 голос
/ 09 марта 2010

Благодаря DisgruntledGoat Я нашел решение:

SELECT username, wikitext, wikidate FROM
    (SELECT username, wiki.text AS wikitext, wiki.date AS wikidate
    FROM wiki_house
    INNER JOIN wiki ON wiki_house.wiki_id = wiki.id
    INNER JOIN users ON wiki.user_id = users.id
    AND wiki_house.house_id = 1
    AND wiki.language = 'it'
    ORDER BY wiki_house.wiki_id DESC) wiki_house
GROUP BY username
ORDER BY wiki.date DESC
LIMIT 10
0 голосов
/ 09 марта 2010
SELECT DISTINCT(username), wiki.text, wiki.date
FROM wiki_house
INNER JOIN wiki ON wiki_house.wiki_id = wiki.id
INNER JOIN users ON wiki.user_id = users.id
AND wiki_house.house_id = 1
AND wiki.language = 'it'
ORDER BY wiki.date DESC
LIMIT 10
...