powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать поле уникальным?
20 сообщений из 20, страница 1 из 1
Как сделать поле уникальным?
    #39438062
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я немного продублирую свой вопрос

Есть таблица categories .

Есть таблица products . Столбец detail_name .

Так же имеется соединительная таблица product_category_assigns . Столбцы product_id и product_category_id .

Нужно вытягивать только по одному товару из каждой категории.

Я делаю:

Код: sql
1.
SELECT DISTINCT product_category_assigns.product_id FROM product_category_assigns inner join products ON product_category_assigns.product_id = products.id where products.detail_name ILIKE '%аце%';



Итог:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 product_id | product_category_id 
------------+---------------------
     796401 |                 831
     796402 |                 831
     796403 |                 831
     801168 |                 921
     801170 |                 921
     801169 |                 921
     796404 |                 831
(7 rows)



Нужно получить 2 товара, грубо говоря:
Код: plsql
1.
2.
3.
4.
5.
6.
 product_id | product_category_id 
------------+---------------------
     796401 |                 831
     801168 |                 921

(2 rows)


Т.е. DISTINCT сделать на product_category_id , но в итоговой таблице должны быть только product_id .
Код: plsql
1.
2.
3.
4.
5.
6.
 product_id  
------------------
     796401
     801168 

(2 rows)
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438156
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynik,

Код: sql
1.
select distinct on (f1) f2, f3 from …
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438198
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynik
Я делаю:
Код: sql
1.
SELECT DISTINCT product_category_assigns.product_id FROM product_category_assigns inner join products ON product_category_assigns.product_id = products.id where products.detail_name ILIKE '%аце%';



Итог:
product_id | product_category_id 796401 | 831 796402 | 831 796403 | 831 801168 | 921 801170 | 921 801169 | 921 796404 | 831

Как минимум лукавите: в Запросе: 1 колонка product_category_assigns.product_id, в Итоге: 2 колонки product_id, product_category_id
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438206
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fte,

Вы просто не умет читать. Сличите посимвольно то что Вам предложили и то что написано у Вас. Разница принципиальная.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438243
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursidofte,

Вы просто не умет читать. Сличите посимвольно то что Вам предложили и то что написано у Вас. Разница принципиальная.
я тоже не умею читать
возможно, в консерватории что-то не так ? не ?
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438250
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ТС есть много способов. вариативно от наличия индексов и т.п.

что--то в таком духе можно, когда данных мало:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH foo AS (
	SELECT 
		p.id AS product_id
		,pca.product_category_id  
		--,p.detail_name
	FROM products p	
	,LATERAL (SELECT product_category_id
		 where  product_category_assigns.product_id = p.id 
		) pca
	WHERE p.detail_name ILIKE '%аце%' -- а триграм тут поможет ?
) foo
SELECT DISTINCT ON (product_category_id  )
	product_category_id  
	,product_id
	,detail_name
FROM foo
-- ORDER BY 1[,2][,3] [desc|asc] -- порядок для  DISTINCT ON
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438262
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я ошибся указав в таблице и product_id, и product_category_id. Судя по запросу там действительно должны быть только product_id.

Но ошибка только в этом, ведь product_id все равно подразумевает product_category_id. И вот как раз это поле нужно сделать уникальным.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438317
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получился такой запрос:
Код: sql
1.
SELECT DISTINCT ON (product_category_assigns.product_category_id) product_category_assigns.product_id FROM product_category_assigns inner join products ON product_category_assigns.product_id = products.id where products.detail_name ILIKE '%аце%';
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438475
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqя тоже не умею читать


Товарищ в очередной раз не заметил разницы между DISTINCT и DISTINCT ON
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438488
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursido,

вы отвечали т-щу fte
, а "не заметил", если я верно вас понимаю -- т-щ ТС (mikeoleynik Member)

судя по его (ТС) вопросу, он не разобрался ни в одном из предложенных ранее способов. и продолжает считать, что сложность выполнения запроса строго пропорциональна длине его (запроса) записи.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438509
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqи продолжает считать, что сложность выполнения запроса строго пропорциональна длине его (запроса) записи.
осталось только оптимизировать запрос: сократить длину записи)
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438618
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Да, действительно. Нужно внимательно читать весь пост.
Я действительно ошибся.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438666
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, спасибо)

Я пока не настолько владею sql чтобы использовать ранки и партишены, как из статьи http://akorotkov.github.io/blog/2016/06/17/faceted-search. Результат будет в разы быстрее?

И с lateral у меня тоже есть сложности. А что в моем запросе не так?
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438715
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynik,

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

а то какие--то дамские посиделки с полунамёками получаются
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438739
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос на данный момент:
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT ON (product_category_assigns.product_category_id) product_category_assigns.product_id 
FROM product_category_assigns 
INNER JOIN products ON product_category_assigns.product_id = products.id
INNER JOIN product_categories ON product_categories.active = true 
WHERE products.detail_name ILIKE '%аце%';



вопрос: Как можно оптимизировать запрос? отрабатывает за полсекунды, думаю это многовато.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438743
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynik,

покажите план запроса
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438746
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynikЗапрос на данный момент:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT DISTINCT ON (product_category_assigns.product_category_id) product_category_assigns.product_id 
FROM product_category_assigns 
INNER JOIN products ON product_category_assigns.product_id = products.id
INNER JOIN product_categories
ON product_categories.active = true ----! WTF
WHERE products.detail_name ILIKE '%аце%';



вопрос: Как можно оптимизировать запрос? отрабатывает за полсекунды, думаю это многовато.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438758
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

В таблице categories есть boolean значение, если true то категория включена. Я делаю выборку из таких категорий.
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438782
mikeoleynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Индексы есть на product_id и product_category_id
...
Рейтинг: 0 / 0
Как сделать поле уникальным?
    #39438943
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikeoleynikqwwq,

В таблице categories есть boolean значение, если true то категория включена. Я делаю выборку из таких категорий.и?




-- у вас не хватает условия в соединении
наверное вот такого?

Код: sql
1.
2.
ON product_categories.active = true ----! WTF
     AND product_categories.id =product_category_assigns.product_category_id
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать поле уникальным?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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