MySQL - сделать топ-5 из двух (не связанных) таблиц в одном утверждении? (с использованием «order by») - PullRequest
0 голосов
/ 22 ноября 2010

Я хочу сделать топ-5 из двух таблиц, которые не связаны друг с другом.И все это должно быть в одном утверждении.Мне интересно, возможно ли это, потому что я пытаюсь сделать это часами.Google не помог мне в конце концов ...

Мой код:

SELECT
  a.id AS "link_id", a.href AS "link_href", a.clicks AS "link_clicks",  
  b.id AS "user_id", b.name AS "user_name", b.posts AS "user_posts"
FROM links a, users b
ORDER BY a.clicks DESC, b.posts DESC 
LIMIT 5

Когда я выполню это, я получу следующее:

link_id     link_href     link_clicks     user_id     user_name     user_posts
5           example.com   123456         10          Name 1        98765
5           example.com   123456         99          Name 2        7486
5           example.com   123456         77          Name 3        6543
5           example.com   123456         65          Name 4        23
5           example.com   123456         1           Name 5        0

Как выя вижу результат ссылок каждый раз одинаковы ..

Я перепробовал все, что мог себе представить ... внутреннее соединение, левое соединение и т. д. ... ничего не получалось.Возможно ли это в одном утверждении, или я должен использовать два отдельных утверждения?(Я попробовал одно утверждение, потому что я думал, что это будет лучше для производительности?)

Ответы [ 3 ]

1 голос
/ 22 ноября 2010

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

Просто отправьте два запроса.Получение несвязанных данных в одном запросе бессмысленно.

1 голос
/ 22 ноября 2010

Нет никакого смысла делать это одним запросом - так что не делайте этого.Возможно, вы сможете сделать это с помощью UNION, если будете использовать псевдонимы имен столбцов, чтобы имена столбцов соответствовали (вам также необходимо убедиться, что типы соответствуют).Но, как я уже сказал, действительно не делают этого .

0 голосов
/ 22 ноября 2010

По вашим словам вы хотите объединить таблицы в user_id

SELECT
  a.id AS "link_id", a.href AS "link_href", a.clicks AS "link_clicks",  
  b.id AS "user_id", b.name AS "user_name", b.posts AS "user_posts"
FROM links a, users b

where a.user_id = b.id

ORDER BY a.clicks DESC, b.posts DESC 
LIMIT 5

Если таблица a не имеет идентификатора пользователя, вам нужно выяснить общую связь между двумя таблицами.

...