Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: MySQL, уникальность
цитата
18/08/10 в 13:26
 FXIX


как выбрать 3 домена с уникальным титлом?
цитата
18/08/10 в 13:36
 Sterx

SELECT DISTINCT(title),domain FROM sites GROUP BY domain ORDER BY domain LIMIT 3

не совсем понятно из твоего рисунка, но поправил

Последний раз редактировалось: Sterx (18/08/10 в 13:48), всего редактировалось 1 раз
цитата
18/08/10 в 13:45
 FXIX
Sterx: я недаром там нарисовал что должно выбраться smail101.gif.
твой запрос вернет
blogspot.com Тестовая запись 1
livejournal.com Тестовая запись 5
wordpress.com Тестовая запись 5

ты сгруппировал по полю domain но поле титл "собралось" на них первое попавшееся. т.е. попал дубль
цитата
18/08/10 в 13:49
 Sterx
Sterx писал:

SELECT DISTINCT(title),domain FROM sites ORDER BY domain LIMIT 3

или так
цитата
18/08/10 в 13:57
 FXIX
blogspot.com Тестовая запись 1
blogspot.com Тестовая запись 2
blogspot.com Тестовая запись 3

...если убрать LIMIT то все 6 записей выплывут. ничего не поменялось.
Ты на титл повесил уникальность, собственно они и перебрались по-порядку.
цитата
18/08/10 в 13:59
 FXIX
тут пересечение множеств. Множество доменов на множество титлов. Задача выбрать уникальные связки.
цитата
18/08/10 в 14:04
 Sterx
смотри в сторону GROUP CONCAT и уникализируй по полученному полю.
лень таблицу набивать
цитата
18/08/10 в 14:14
 FXIX
конкат тут не нужен. задача то простая, выбрать

wordpress.com \ Тестовая запись 5
livejournal.com \ Тестовая запись 6
blogspot.com \ Тестовая запись 1 (тут любое от 1 до 4)

или

wordpress.com \ Тестовая запись 6
livejournal.com \ Тестовая запись 5
blogspot.com \ Тестовая запись 1 (тут любое от 1 до 4)

smail101.gif
цитата
18/08/10 в 15:18
 Sterx
валидируй данные на входе и не надо будет маяться этим самым.
цитата
18/08/10 в 15:44
 FXIX
Sterx: вопрос не про валидацию данных. Все что надо 33 раза валидируется. титлы и домены имеют связь N к M (по полю theme_id).

еще упростил вопрос
цитата
18/08/10 в 15:49
 Heavy
SQL не решает задачи "распределения". что ему например делать, если у тебя в базе будет:
wordpress.com \ Тестовая запись 5
wordpress.com \ Тестовая запись 6
livejournal.com \ Тестовая запись 5
livejournal.com \ Тестовая запись 6
blogspot.com \ Тестовая запись 5
blogspot.com \ Тестовая запись 6
?
т.ч. имхо - выбирай то что главнее тайтл или домен, а уже оставшуюся часть разрешай в скрипте.
цитата
18/08/10 в 17:29
 kodek
Мне тоже кажется, что просто SQL тут не обойтись.
цитата
18/08/10 в 17:58
 FXIX
Heavy: не надо никаких распределений. Реальная ситуация - в школьном журнале на каждого ученика N записей ФИО. И каждый должен получить разный пирожок. Т.е. задача выбрать из всего бардака уникальных учеников. и раздать им всем разные неповторяющиеся пирожки.

Более просто:
http://imglink.ru/show-image.php?id=6589f15810e48f29a354410b425f836a


Выбрать только те строки в которых id2 будет уникально. Т.е. к примеру делаем GROUP BY id1 и выборка получается такая:
1 | 5
2 | 5
Потому что в поле id2 падает первое попавшееся значение. т.е. в итоговой таблице есть дубль.

А надо чтобы было:

1 | 6
2 | 5
или
1 | 5
2 | 6

Т.е. группировка по полю id1, с возможностью для id2 задать общую уникальность в результате.

в скрипте можно развести, не спорю. но хотелось бы... smail101.gif
цитата
18/08/10 в 20:46
 FXIX
разобрался всем спасибо всем накатил репу smail54.gif
цитата
18/08/10 в 21:36
 Heavy
ну так покажи чтоли - что получилось - если через 1 sql запрос разрешить удалось icon_wink.gif
цитата
19/08/10 в 08:49
 FXIX
да хуй. пришлось структуру менять. верхняя таблица собиралась из двух, и потом с ней надо было сделать вот такую пертурбацию. пришлось ничего не собирать и просто "дергать домен"->"дергать титл". смысл тотже, но дубль не проходит ибо в таблицу титлов летит флаг
цитата
19/08/10 в 15:29
 ivango
SELECT distinct `title` FROM `test` as t1 join (select distinct domain from test) as t2 where t1.domain=t2.domain limit 3

вот так, пожалуй...
цитата
19/08/10 в 18:04
 Heavy
неа, не поможет так. тем более что в выборку ты забыл добавить domain
цитата
19/08/10 в 20:31
 Dr.Syshalt
Фактически задача сводится к тому, что надо в критериях выбора учитывать результаты предыдущих выбранных рядов, а это задача не для ANSI SQL вообще, он так не умеет. Может, еще получится напрячь мозг и выдать такое из MS SQL 2005 и Oracle через pivot query, но не из MySQL точно.

Если очень хочется что-то такое из базы получить запросом - то можно логику подобную в сторед-процедуры засунуть, благо даже убогий MySQL теперь это поддерживает. Но ТС, видать, решил проблему все равно, так что поздно нам кулаками махать ))
цитата
19/08/10 в 20:56
 FXIX
не-не. всегда приятно когда братва подскочила поддержать кулаками icon_biggrin.gif


Эта страница в полной версии