powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Альтернатива HAVING
12 сообщений из 12, страница 1 из 1
Альтернатива HAVING
    #38797325
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит задача показать записи у которых поле field1 уникально, потом их отсортировать и наложить лимиты. Т.е. что-то типа такого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT
  *
FROM
  my_table
WHERE
  field1 IN (
    SELECT
      field1
    FROM
      my_table
    GROUP BY
      field1
    HAVING
      COUNT(*) = 1
  )
ORDER BY
  id
LIMIT 50



Мне такая конструкция сильно не нравится, но, что-то не могу придумать ничего адекватного

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797343
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HAVING сам по себе ни в чем не провинился, а запрос я бы переписал так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  *
FROM
  my_table t1
WHERE
NOT EXISTS (SELECT NULL FROM my_table t2 WHERE t2.field1=t1.field1)
ORDER BY
  id
LIMIT 50

или так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT
  *
FROM
  my_table t1
JOIN 
  (
    SELECT
      field1
    FROM
      my_table
    GROUP BY
      field1
    HAVING
      COUNT(*) = 1
  ) t2
ON t1.field1=t2.field1
ORDER BY
  id
LIMIT 50


Какой выйдет быстрее - зависит от фактических данных в таблице.
В любом случае нужен индекс по полю field1.
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797384
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ любом случае нужен индекс по полю field1Это понятно. К сожалению, оно еще и строковое (номер телефона)
miksoftзависит от фактических данных в таблице.Ожидается, что отбросится порядка 10% - 20% записей
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797387
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

У меня еще мысль крутится, но как-то не могу ее сформулировать. Может завести еще одну таблицу только с этим полем, а из основной таблицы на нее ссылаться? Но тогда будет просадка при вставках. А INSERT у меня вызывается чаще, чем SELECT
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797401
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Может завести еще одну таблицу только с этим полем, а из основной таблицы на нее ссылатьсяСильно зависит от предметной области и логики всей системы. Но судя по "отбросится порядка 10% - 20% записей" дублей в этом поле мало и я бы не стал так делать.
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797425
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тоже начал сомневаться в постановке задачи.... есть поле, может быть не уникально, но нам на който нужны записи где оно уникально....что за задача?
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797429
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_miksoft,

У меня еще мысль крутится, но как-то не могу ее сформулировать. Может завести еще одну таблицу только с этим полем, а из основной таблицы на нее ссылаться? Но тогда будет просадка при вставках. А INSERT у меня вызывается чаще, чем SELECT

завести таблицу и в ней хранить айди, значение и щётчик...сколько счас ссылок есть на это дело.

ну и тригерами замутить это дело(обновление, вставка, удаление)

но опять же...что за задача!?
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797566
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453.что за задача!?Парсится доска объявлений. Пользователю не нужно показывать объявления от агенств. Критерий агенства определил заказчик и сказал, что агенство - это два и более объявления с одним телефоном
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797758
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ааа ну тогда и решение совсем другое

1)парсим доску обьявлений сохраняем.
в обьявление, и в таблицу телефонов аля

Insert into telephones (id,phone,count) values (null,'123-45-67',0)
on duplicate key update count = count+1,id= last_insert_id(id);

получаем айдишник записи телефон,

делаем вставку в таблицу обьявлений, указывая ссылку на телефон.

и усё!

это план минимум, план максимум, сделать в таблице обьявлений ещо одно поле - маркер агенства - по умолчанию 0 - не агенство.

и тригер на обновление телефонов, если ставиться значение 1, то обновить таблицу обьявлений - все обьявы с сылкой на этот номер пометить маркером агенство.

и не надо будет каждый раз перещёты делать
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38797868
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453тогда и решение совсем другоеВот и я где-то об этом думал. Но красиво сформулировать не мог. Спасибо
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38798062
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
Код: sql
1.
2.
WHERE
NOT EXISTS (SELECT NULL FROM my_table t2 WHERE t2.field1=t1.field1)

а где условие на несовпадение ид? эдак оно вообще ничего не выдаст :)
...
Рейтинг: 0 / 0
Альтернатива HAVING
    #38798324
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoft
Код: sql
1.
2.
WHERE
NOT EXISTS (SELECT NULL FROM my_table t2 WHERE t2.field1=t1.field1)


а где условие на несовпадение ид? эдак оно вообще ничего не выдаст :)Да, виноват, надо добавить:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  *
FROM
  my_table t1
WHERE
NOT EXISTS (SELECT NULL FROM my_table t2 WHERE t2.field1=t1.field1 AND t2.id<>t1.id)
ORDER BY
  id
LIMIT 50
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Альтернатива HAVING
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]