MySQL - изменение запроса, чтобы быть отличным только на 1 столбце - PullRequest
1 голос
/ 04 декабря 2008

У меня есть следующий запрос, который работает, за исключением того, что я хотел бы, чтобы он вел себя по-другому. Теперь он ищет все повторяющиеся строки в url и возвращает их в порядке количества повторяющихся URL-адресов. Я использую GROUP_ CONCAT для разделения всех разных экранных имен.

Однако может быть несколько строк с одним и тем же URL-адресом и одинаковым именем экрана. Как сделать так, чтобы он только получал строки, в которых имя_экранов отличается.

SELECT url, title, GROUP_CONCAT( screen_name ) , COUNT( t_uid )
            FROM `twl_links`
            WHERE twl_uid =3
            AND timestamp >= NOW( ) - INTERVAL 24 HOUR
            GROUP BY (
            url
            )
            ORDER BY COUNT( t_uid ) DESC

Ответы [ 3 ]

2 голосов
/ 04 декабря 2008

Непонятно, что именно вы хотите. Учитывая эти данные:

t_uid    url                    title           screen_name
1        http://google.com/     Google          bob
2        http://google.com/     Google Search   bob
3        http://google.com/     Google          tom

каких результатов вы ожидаете? Если вы хотите:

http://www.google.com  '???'  'bob,tom'   2

тогда вы могли бы сделать SELECT DISTINCT подзапрос для удаления дубликатов (который вы бы поставили вместо FROM twl_links).

Если хочешь

http://www.google.com  '???'  'bob,tom'   3

тогда вы можете сделать GROUP_CONCAT(DISTINCT screen_name), чтобы получить это.

Обратите внимание, что во всех случаях возвращаемый заголовок является неоднозначным (если только нет сопоставления N: 1 между URL и заголовком; то есть, если каждый URL не имеет только одного отдельного заголовка)

К вашему сведению, у вас избыточные данные, которые трудно запросить из-за отсутствия нормализации.

2 голосов
/ 04 декабря 2008

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

SELECT t1.url, GROUP_CONCAT( t1.screen_name ) , COUNT( * ) 
FROM (
  SELECT DISTINCT url, screen_name
  FROM mytable
) AS t1
GROUP BY t1.url

Это не дает вам заголовок, но так как заголовок отсутствует в GROUP BY, мне было не совсем понятно, что это поле все равно будет возвращать. Если вам нужны все заголовки этих URL, вы можете присоединиться к вышеуказанному запросу со своей таблицей.

0 голосов
/ 04 декабря 2008

Вы пытались использовать отличное ключевое слово?

http://www.tech -recipes.com / гй / 1481 / игнорируемый дублированные записи-в-MySQL-выбрать-используя самобытным-ключевое слово /

EDIT:

Вот еще одна статья, показывающая, где можно использовать различные с group_concat:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...