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:
я недаром там нарисовал что должно выбраться
.
твой запрос вернет
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)
цитата
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 задать общую уникальность в результате.
в скрипте можно развести, не спорю. но хотелось бы...
цитата
18/08/10 в 20:46
FXIX
разобрался всем спасибо всем накатил репу
цитата
18/08/10 в 21:36
Heavy
ну так покажи чтоли - что получилось - если через 1 sql запрос разрешить удалось
цитата
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
не-не. всегда приятно когда братва подскочила поддержать кулаками
Новая тема
Ответить
Эта страница в полной версии