|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.12.2014, 03:42 | #1 |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
Всем добрый день. Занимаюсь разработкой веб-сайта, нужно составить sql запрос, собственно проблема в том что азы sql я знаю, но вот как реализировать нужное - увы не знаю...
Есть таблица: | age | age_min | age_max | number | 20 | 15 | 100 | 5 | 30 | 10 | 80 | 3 ................................... ................................... ... Нужно сгруппировать строки так чтобы number был одинаковым во всей группе, age ВСЕХ строк подходил под минимальные и максимальные значения ВСЕХ сток в группе. Пример ответа: 10|27|90|3 25|30|80|3 25|26|50|3 01|34|40|3 Это только одна группа, по идее их может быть много. Собственно говоря как это реализировать? Здесь как бы нужно сравнивать каждую строку с с другими... много строк с множеством строк. Люди, если что-то непонятно вы скажите. Это довольно сложно обьяснить... Потому честно говоря начинаю задумываться реально ли такое сделать?
Это ещё не конец и даже не начало конца, это возможно только конец начала.
Последний раз редактировалось Stilet; 08.12.2014 в 07:32. |
08.12.2014, 07:21 | #2 | |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Цитата:
Написать глубокой ночью в несильно популярном разделе и через полчаса удивиться, что никто не ответил - молодцом! |
|
08.12.2014, 07:33 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Может лучше начни с того что расскажешь зачем тебе такое?
I'm learning to live...
|
|
08.12.2014, 08:31 | #4 | |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
Цитата:
На счет несоответствия я очень сильно извиняюсь (100 раз проверял, но не посмотрел что я перепутал местами колонки). Собственно говоря, age и age_min в примере ответа нужно поменять местами. то есть: 27|10|90|3 30|25|80|3 26|25|50|3 34|01|40|3 Давайте я наведу реальный пример. Я пишу веб-сайт по поиску напарников для сетевых игр (ну например у вас есть желание поиграть quake 3, но не с кем). Понятное дело что человеку которому лет так 35, будет совсем не интересно *рубиться в кваку* с группой 10-летних школьников. Так вот, грубо говоря на сайте вы заполняете форму где указываете некоторые данные, среди этих данных есть ваш возраст, а также минимальный и максимальный возрасты ваших потенциальных напарников. Если система не находит напарника (а точнее группу напарников, кстати, колонка number - как раз указывает сколько людей нужно) то она добавляет ваш *запрос* в так званный стэк (который является таблицей в базе данных) и когда кто-то дугой заполняет форму система снова проверяет есть ли подходящее количество людей для уже новой формы, если есть - она извлекает нужные записи в форме и обрабатывает их, если нет - также добавляет форму в стэк. В принципе здесь может быть и никакое группирование не нужно, просто надо найти записи которые сходятся между собой и проверить сходиться и количество с number. оффтоп: Спасибо что так быстро отозвались, честно говоря я не знаю поняли ли Вы то что я написал, если нет - я подумаю как бы получше описать ситуацию и завтра утром вам изложу более понятную версию. Так же я ни в коем случае не осуждаю вас за те *предубеждения* ибо знаю какие индивидуумы иногда на этот форум забредают. Хотя вполне вероятно что я один из таких, но с моей перспективы этого не видно... Вообще мне бы стоило прочесть книгу по sql, но дело в том что мне пока по рельсам (Rails) хватает материала который нужно прочесть и читать целую книгу ради одного сложного запроса пока нет особого желания. Хотя само собой рано или поздно придется.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
|
|
08.12.2014, 08:56 | #5 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ну если твоя СУБД съест group by в подзапросе, и если правильно понял, то тогда примерно так
Код:
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 08.12.2014 в 09:00. |
|
08.12.2014, 09:37 | #6 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Цитата:
|
||
08.12.2014, 09:46 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
08.12.2014, 09:51 | #8 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,777
|
Украина же в Европу собиралась! Шо, уже до Америки доплыла?
|
08.12.2014, 22:04 | #9 | |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
Вообще я пытаюсь никому не говорить где я живу, а тут получается совсем по другому. хм... А на счет предубеждений что мне мешало написать пост раньше, а отправить позже? Ну ладно давайте закроем эту ветку разговора.
На счет кода: Код:
Цитата:
Добавлено: хотя нет, пока что не закрывайте тему. Я отпишу когда протестирую запрос.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
Последний раз редактировалось pufystyj; 08.12.2014 в 22:15. |
|
09.12.2014, 01:46 | #10 | |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
Цитата:
Есть вот такие данные в бд: age_min | age | age_max | number 10 | 20 | 50 | 3 15 | 16 | 21 | 3 0 | 22 | 100| 3 3 | 70 | 100 | 3 13 | 17 | 25 | 4 14 | 16 | 23 | 5 Дальше мы выполняет предоставленный вами запрос, но дело в том что он выбирает данные где возраст стоит между самым меньшим максимальным и самым большим минимальным из всех строк в номерной группе. Вот ответ по запросу: 10 20 50 3 15 16 21 3 13 17 25 4 14 16 23 5 Но тут если откинуть строку *15 16 21 3*, тогда строки 0 | 22 | 100| 3 3 | 70 | 100 | 3 подойдут под 10 | 20 | 50 | 3 и тогда группа будет состоять из 3-х строк, как раз то количество что надо. Собственно проблему можно озвучить как-то так: Найти максимально большую группу строк в каждой нормерной группе (то есть сначала сгруппировать по number) в которых age'ы не выходят за минимальные и максимальные рамки любой строки в этой самой *максимально большой группе*. То есть не в целой группе с номером равным 3, а в её подгруппе. Мне кажется что подобное нельзя в базе данных сделать, наверное придется доставать номерную группу из бд и уже ручками их группировать и все же, что скажут эксперты?
Это ещё не конец и даже не начало конца, это возможно только конец начала.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сложный запрос SQL | irina1410 | БД в Delphi | 4 | 03.07.2012 16:46 |
сложный SQL update | luiszevs | SQL, базы данных | 4 | 18.12.2011 13:53 |
Сложный запрос в SQL | A-Lex-Is | SQL, базы данных | 1 | 10.08.2010 23:19 |
сложный sql запрос | kate158 | БД в Delphi | 0 | 18.09.2008 11:38 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |