За последние 24 часа нас посетили 21809 программистов и 1879 роботов. Сейчас ищут 814 программистов ...

Запрос с DISTINCT

Тема в разделе "MySQL", создана пользователем Dmitriy A. Arteshuk, 27 дек 2012.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Таблица:
    id - email - name

    необходимо вытащить из таблицы все строки и столбцы, у которых email уникально

    Код (Text):
    1. SELECT DISTINCT email FROM table
    вот так мы вытащим только столбец email, я как получить ВСЮ строку из БД???
     
  2. tchk

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

    С нами с:
    8 дек 2012
    Сообщения:
    10
    Симпатии:
    0
    SELECT count(id),id,email,name FROM table GROUP BY email;
    все что не равно 1-це в PHP не выводим...
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вот они последствия кривой организации бд.

    у тебя у одного человека могут быть несколько имейлов? надо было делать две таблицы.
    у тебя только один мыльник на человека? тогда надо было поставить уникальный индекс на имеил.
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    мыльник один....но записей с этим мыльником может быть несколько

    вопрос решился так:

    Код (Text):
    1. SELECT * FROM table GROUP BY email
    не знаю насколько верно...но вот
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как так несколько записей с мыльником?
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    структуру таблицы я привел условную....но в общем ты прав, организация БД кривая (((
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    неверно! mysql позволяет, но набор данных непредсказуемый.
    ты уж определись какие именно записи тебя интересуют в случае совпадения email и тогда будет понятно как оформить запрос.

    Добавлено спустя 5 минут 17 секунд:
    вот так, например, было бы корректно:
    Код (Text):
    1. SELECT min(id), email FROM table GROUP BY email
    типа "первый, кто зарегистрировался с таким email".
    а имея id уже можно получить все поля — через вложенный запрос или inner join

    или вот осмысленный запрос:
    Код (Text):
    1. SELECT max(last_activity), email FROM table GROUP BY email
    "те из них, которыми пользуются"
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    artoodetoo спасибо, попробую...
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. SELECT `email`, COUNT(*) AS `count` FROM `email` GROUP BY `email` 
    Код (PHP):
    1. SELECT `email`, COUNT(*) AS `count` FROM `email` GROUP BY `email` HAVING `count`>1
    =)