За последние 24 часа нас посетили 16680 программистов и 1650 роботов. Сейчас ищут 2032 программиста ...

Функция, обратная DISTINCT

Тема в разделе "MySQL", создана пользователем FRiK, 22 май 2008.

  1. FRiK

    FRiK Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Собственно, сабж. Нужно сделать выборку данных, которые повторяются в базе, а те, что встречаются один раз - не выводить. Что-то слышал про having, но не могу сообразить, как заюзать.
     
  2. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    [sql]
    select count(*), id, value from test
    group by value
    having count(*)>1
    [/sql]
     
  3. FRiK

    FRiK Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Ага, верное направление. Теперь дальше. При таком запросе в результат выпадает сотлбец со счетчиком count и показывает число повторений строк, которые встречаются > 1 раза, но сами эти строки выводит по одной. А мне нужно, чтобы они все выводились и чтобы count столбец не светился.
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    [sql]select t0.* from
    ( table t0,
    (select id from table
    where 1 $where
    group by value
    having count(*)>1) t1
    )
    where table.id=t1.id[/sql]
     
  5. FRiK

    FRiK Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Эх, мало чего понял из предложенного варианта, к сожалению :(
     
  6. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    FRiK, тебе шашечки или ехать? Чтобы работало или чтобы понятно было? Тогдв mysql.com - читай. :)
     
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    к тому же я тормознул.
    Вложенным запросом выбираешь нужные значения, которые повторяются.
    [sql](select value from table
    where 1 $where
    group by value
    having count(*)>1) t1[/sql]
    потом выбираешь из основной таблицы все записи с такими значениями
    [sql]select t0.* from
    ( table t0,
    (select value from table
    where 1 $where
    group by value
    having count(*)>1) t1
    )
    where table.value=t1.value[/sql]
     
  8. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    lexa
    ты не прав.
     
  9. FRiK

    FRiK Активный пользователь

    С нами с:
    16 май 2008
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Если не понятно как работает, то так далеко не уедешь...
    Что такое 'where 1 $where' непонятно, откуда взялось $where?
     
  10. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    $where Ты добавляешь сам, если есть еще дополнительные условия. Если нет - то $where='';
    если да - то $where=" AND ...