Автор Тема: Проблема с mysql  (Прочитано 3877 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Проблема с mysql
« : 26 Сентября 2004, 18:47:34 »
Добрый день.

Есть такая проблема, люди , кто может посоветуйте пожалуйста.!

Есть таблица клиетнов с СТОЛЬЦАМИ
ID -NAME- ADRES-MAIL-OTHER-

МНОГО ЗАПИСЕЙ ГДЕ   MAIL   ОДИН И ТОТ ЖЕ . Т. Е БОНАЛЬНЫЕ ПОВТОРЫ.

НЕОБХОДИМО СДЕЛАТЬ ТАК, ЧТОБЫ ИЗ ЭТОЙ ТАБЛИЦЫ СДЕЛАТЬ ТОЧНО ТАКУЮ ЖЕ НО ЧТОБЫ  MAIL НЕ ПОВТОРЯЛСЯ ! Т. Е ВСЕ ЗАПИСИ ГДЕ МЫЛО ПОВТОРЯЕТЬСЯ БОЛЬШЕ 1 РАЗА , ПРОСТО ВЗЯТЬ И УДАЛИТЬ .!!!

Я ЗНАЮ ТОЛЬКО ТАК
CREATE TABLE people_new SELECT DISTINCT mail  FROM people
 НО В ЭТОМ СЛУЧАЕ СОЗДАЕТЬСЯ ТАБЛИЦА ТОЛЬКО С СТОЛБЦОМ mail , А мне еще нужны и данные из остальных столбцов !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Если делаю вот так
CREATE TABLE people_new SELECT DISTINCT id,mail  FROM people
-- Но id уникальны, а ,соответственно, mail повторяются с повторами !!!!

Очень благодарен !!!
 - On-line сервис.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Проблема с mysql
« Ответ #1 : 28 Сентября 2004, 13:47:33 »
а приложение простенькое или функцию написать слабо?
And no religion too...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблема с mysql
« Ответ #2 : 28 Сентября 2004, 14:16:28 »
listopad

Читаем в мануале что DISTINCT выбирает уникальные поля
соответсвенно:
Цитировать
-- Но id уникальны, а ,соответственно, mail повторяются с повторами !!!!

Что и следовало ожидать

А есть такая функция как GROUP BY, и если мы сделаем так:
CREATE TABLE people_new SELECT id, mail FROM people GROUP BY mail

То все будет как положено, только вот id будет подставлятся, первый попавшийся...

DISTINCT - это тот же GROUP BY только для всех выбранных столбцов

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Проблема с mysql
« Ответ #3 : 28 Сентября 2004, 23:03:12 »
Огромное спасибо !
Как же я сам не додумался ;)
 - On-line сервис.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Проблема с mysql
« Ответ #4 : 29 Сентября 2004, 15:08:54 »
А сейчас проблема еще хуже.
Я сижу на masterhost. У них версия mysql 3.23

Что опять не получается !
Да допустим я создал новую таблицу с неповторяющимися mail.
Спосибо за это -Phoinix .

Имею две таблицы people_new и people.
Теперь пытаюсь как раз  найти тех , кто не вошел в новую таблицу
если делать так
SELECT ID FROM people_new, people WHERE people_new.ID != people.ID
--не работает ,т. к. как я понимаю такие запросы работают только в более новых версиях.

Если делаю так
SELECT id, count( * ) AS count
FROM people
GROUP BY email
HAVING count >1
ORDER BY count DESC
Он показывает какие адреса как раз повторяются , но по одному из кажной записи попали в новую таблицу , А мне нужны как раз только те которые не попали вообще , Или не попадут если использовать
CREATE TABLE people_new SELECT id, mail FROM people GROUP BY mail
 - On-line сервис.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблема с mysql
« Ответ #5 : 29 Сентября 2004, 18:48:14 »
listopad

Цитировать
т. к. как я понимаю такие запросы работают только в более новых версиях

Неправильно понимаешь

Цитировать
SELECT ID FROM people_new, people WHERE people_new.ID != people.ID

ID какой таблицы ты выбираешь? может все-таки people.ID ???

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Проблема с mysql
« Ответ #6 : 29 Сентября 2004, 19:43:52 »
Если так , то получается вообще какой-то бред

SELECT people.ID FROM people_new, people WHERE people_new.ID != people.ID

В одной таблице 875 записей , в другой , соответственно, в которой без повторов 825 . Он должен вывести мне id этих 50 записей. А он откуда-то берет 721050 записей?????????
 - On-line сервис.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Проблема с mysql
« Ответ #7 : 29 Сентября 2004, 19:50:03 »
Хотя, если поискать совпадающие id так
SELECT people.ID FROM people_new, people WHERE people_new.ID = people.ID

То все хорошо, выводит 825 записей !!!!!!!!!!!!! как, по логике и должно быт !!!!!!!!!
 - On-line сервис.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблема с mysql
« Ответ #8 : 30 Сентября 2004, 14:27:40 »
listopad

Однако... логику SQL понимаем?

Почему бред... все правильно тебе выводит...
Можно даже посчитать:

875 х (825 - 1) = 721000, Это количество не повторов записей таблиц, отнимаем 1 потому, что 1 раз - все таки есть повтор
Но 50 записей у нас все же не повторяются, значит:
721000 + 50 = 721050 - вполне реальная цифра, если немного подумать, то можно путем несложных манипуляций сузить результат до 50...

Проверять не буду... тут главное принцип...

SELECT COUNT(people.ID) AS sum
FROM people_new, people
WHERE people_new.ID != people.ID
GROUP BY people.ID
HAVING sum = \'825\'

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28