Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 13:26 |
как выбрать 3 домена с уникальным титлом?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 18/08/10 в 13:36 |
Код: [развернуть] |
SELECT DISTINCT(title),domain FROM sites GROUP BY domain ORDER BY domain LIMIT 3
|
не совсем понятно из твоего рисунка, но поправил
Последний раз редактировалось: Sterx (18/08/10 в 13:48), всего редактировалось 1 раз
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 13:45 |
Sterx: я недаром там нарисовал что должно выбраться .
твой запрос вернет
blogspot.com Тестовая запись 1
livejournal.com Тестовая запись 5
wordpress.com Тестовая запись 5
ты сгруппировал по полю domain но поле титл "собралось" на них первое попавшееся. т.е. попал дубль
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 18/08/10 в 13:49 |
Sterx писал: | Код: [развернуть] |
SELECT DISTINCT(title),domain FROM sites ORDER BY domain LIMIT 3
|
или так |
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 13:57 |
blogspot.com Тестовая запись 1
blogspot.com Тестовая запись 2
blogspot.com Тестовая запись 3
...если убрать LIMIT то все 6 записей выплывут. ничего не поменялось.
Ты на титл повесил уникальность, собственно они и перебрались по-порядку.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 13:59 |
тут пересечение множеств. Множество доменов на множество титлов. Задача выбрать уникальные связки.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 18/08/10 в 14:04 |
смотри в сторону GROUP CONCAT и уникализируй по полученному полю.
лень таблицу набивать
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 14:14 |
конкат тут не нужен. задача то простая, выбрать
wordpress.com \ Тестовая запись 5
livejournal.com \ Тестовая запись 6
blogspot.com \ Тестовая запись 1 (тут любое от 1 до 4)
или
wordpress.com \ Тестовая запись 6
livejournal.com \ Тестовая запись 5
blogspot.com \ Тестовая запись 1 (тут любое от 1 до 4)
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 18/08/10 в 15:18 |
валидируй данные на входе и не надо будет маяться этим самым.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 15:44 |
Sterx: вопрос не про валидацию данных. Все что надо 33 раза валидируется. титлы и домены имеют связь N к M (по полю theme_id).
еще упростил вопрос
|
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 18/08/10 в 15:49 |
SQL не решает задачи "распределения". что ему например делать, если у тебя в базе будет:
wordpress.com \ Тестовая запись 5
wordpress.com \ Тестовая запись 6
livejournal.com \ Тестовая запись 5
livejournal.com \ Тестовая запись 6
blogspot.com \ Тестовая запись 5
blogspot.com \ Тестовая запись 6
?
т.ч. имхо - выбирай то что главнее тайтл или домен, а уже оставшуюся часть разрешай в скрипте.
|
|
|
|
С нами с 07.10.01
Сообщения: 4835
Рейтинг: 3672
|
Добавлено: 18/08/10 в 17:29 |
Мне тоже кажется, что просто SQL тут не обойтись.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 17:58 |
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 задать общую уникальность в результате.
в скрипте можно развести, не спорю. но хотелось бы...
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 18/08/10 в 20:46 |
разобрался всем спасибо всем накатил репу
|
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 18/08/10 в 21:36 |
ну так покажи чтоли - что получилось - если через 1 sql запрос разрешить удалось
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 19/08/10 в 08:49 |
да хуй. пришлось структуру менять. верхняя таблица собиралась из двух, и потом с ней надо было сделать вот такую пертурбацию. пришлось ничего не собирать и просто "дергать домен"->"дергать титл". смысл тотже, но дубль не проходит ибо в таблицу титлов летит флаг
|
|
|
|
продаю базы адалт кейвордов
С нами с 09.11.02
Сообщения: 9045
Рейтинг: 3772
|
Добавлено: 19/08/10 в 15:29 |
Код: [развернуть] | SELECT distinct `title` FROM `test` as t1 join (select distinct domain from test) as t2 where t1.domain=t2.domain limit 3 |
вот так, пожалуй...
|
|
сдам подпись, стучите в личку
|
4
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 19/08/10 в 18:04 |
неа, не поможет так. тем более что в выборку ты забыл добавить domain
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 19/08/10 в 20:31 |
Фактически задача сводится к тому, что надо в критериях выбора учитывать результаты предыдущих выбранных рядов, а это задача не для ANSI SQL вообще, он так не умеет. Может, еще получится напрячь мозг и выдать такое из MS SQL 2005 и Oracle через pivot query, но не из MySQL точно.
Если очень хочется что-то такое из базы получить запросом - то можно логику подобную в сторед-процедуры засунуть, благо даже убогий MySQL теперь это поддерживает. Но ТС, видать, решил проблему все равно, так что поздно нам кулаками махать ))
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 19/08/10 в 20:56 |
не-не. всегда приятно когда братва подскочила поддержать кулаками
|
|
|
|