-
Уважаемые мастера, есть вопрос. Имеется таблица :
id p s n
1 100 5 200
2 100 5 201
3 100 6 200
Подскажите(если это возможно) как создать единый запрос, если известно, что при первом обращении p=100,s=5,n=200 и 201, а при втором обращении p=100,s=6,n=200
-
а при втором обращении
уточните.
второе обращение луны вокруг земли или солнца вокруг ядра галактики?
-
>кгшзх
А почему первое обращение вопросов не вызвало ? Если можете ответить по существу вопроса - ответьте, если непонятен вопрос - уточните, что именно не понятно. Зачем мусорить эфир.
-
чтобы ответить по существу вопроса, нужно чтобы было само существо вопроса.
а у тебя здесь только детский лепет трехлетнего малыша с какими-то цифрами и обращениями кого-то куда-то или к кому-то.
-
> если непонятен вопрос - уточните, что именно не понятно.
Уточняю, чё хотите получить?
-
Телепатирую. Нужен
ORDER BY
-
не угадал.
-
телепатрирую. Нужен параметр и where по "s"
-
Тогда 4 параметра и between
-
>Плохиш
А разве я не написал, что хочу получить ? Нужен единый запрос, если это возможно. Исходные данные есть : и содержимое таблицы и то, что имеем при обращении к ней. Что еще я не дописал ?
>кгшзх
Пример запроса написать слабо ?
-
на слабо будешь одноклассниц разводить, вьюноша.
-
>кгшзх
В таком случае хотелось бы увидеть результат, а не пустую болтавню. Получится - респект тебе, взрослый человек :-)
-
Сергей (21.05.15 16:14) [11]
Приведи мысли в порядок и начни все с начала.
-
>Jeer
Начиню сначала. Структура таблицы и ее данные есть выше.
Нужно, чтобы в итоге единого запроса получился набор :
в первом обращении - id=1 и id=2, во втором - id=3. Проблема в том, что n для обоих обращений пересекаются.
-
Т.е. ты хочешь, чтобы первый раз 2*3=6, а во второй раз 2*3=5 ?
Дошло?
-
>Jeer
Нет, не так. Я хочу исключить повторяющиеся записи. Есть в таблице : p = 100,
s = 5, n = 200 и 201 и пользователь снова пытается ввести аналогичное. Поэтому и хочу проверить есть ли такое. Если есть - новая запись не создается. Иными словами если p = 100,s = 5, n = 200 и 201, а пользователь выбирает туже комбинацию, то запись не должна создаваться. Но спросить о наличии такой комбинации я хочу в одном запросе(s и n могут меняться). Не хотелось бы прибегать к помощи ХП или анализа в клиенте, хотелось бы сформировать один запрос к уже имеющимся данным.
-
заходят два юзера.
оба хотят вставить 100 7 300
для обоих ты проверяешь комбинацию и обоим сообщаешь, что такой еще нет.
и оба юзера благополучно вставляют свои 100 7 300
/*
а все потому что кто-то не создал констрейнт уникального индекса, а занимается херней с проверками, актуальность результатов которых уже через миллисекунду становится неактуальной */
-
>кгшзх
Остроумие на высоте, а до дела что-то не доходит пока. Пустобрехством заниматься - не мешки ворочать. Так ведь, взрослый человек ? :-)
-
> [17] Сергей (21.05.15 17:40)
> а до дела что-то не доходит пока
Из тебя вытягивают клещами реальную проблему, вытянули нечто уже ближе к реальности, дали ответ, а ты всё ещё не видишь его. Повторю - констрейнт спасёт ОРД.
-
> Сергей (21.05.15 17:40) [17]
> >кгшзхОстроумие на высоте
ты уже про индексы прочитал? Или так и будишь, как идиот, одно и тоже долдонить?
> Не хотелось бы прибегать к помощи ХП или анализа в клиенте
сколько вумных словей-то.
-
Всем спасибо за никчемные ответы.
-
> [20] Сергей (21.05.15 18:27)
Ну это да - умные благоразумные мальчиши-кибальчиши дают код, а здесь одни плохиши дают никчёмные советы. Жаль.
-
при первом обращении p=100,s=5,n=200 и 201,
а при втором обращении p=100,s=6,n=200
select * from table
where n = case :p_param
when 1 then 5
when 2 then 6
else null
end
при первом "обращении" (p_param = 1) получим :
100 5 200
100 5 201
при втором "обращении" (p_param = 2) получим :
100 6 200
что и требовалось в идиотском как бы вопросе, как бы детально и как бы конкретно как бы поставленном как бы по существу.
-
> [22] кгшзх © (21.05.15 18:41)
Ты тоже плохиш, но код дал. Жаль.
-
этот код ему не поможет потому что нужен другой код, даже если проверку уникальности делать с клиента.
потому и дал.
-
> [24] кгшзх © (21.05.15 19:08)
> этот код ему не поможет
Я же сказал - плохиш.
-
> что и требовалось
да нет, -
> я хочу в одном запросе(s и n могут меняться).
, т.е. 1 запрос, а у вас уже 2, и только для n
-
да дад.
Вот исходное:
Уважаемые мастера, есть вопрос. Имеется таблица :
id p s n
1 100 5 200
2 100 5 201
3 100 6 200
Подскажите(если это возможно) как создать единый запрос, если известно, что при первом обращении p=100,s=5,n=200 и 201, а при втором обращении p=100,s=6,n=200
Сразу намекнули, что надо бы перевести с птичьего на русский.
Сразу после намека оно сказало, что вопрос поставлен предельно точно и полно .
Ну раз предельно точно поставлено, то в [22] предельно точно отвечено.
Могу приложить нотариально заверенный скриншот результата обеих "обращений"
-
ну так n это те что 200 2001 а у вас 5 6, тоже не правильно, запросы никогда ничего не вернут :)
что человеку надо мне не понятно тоже, скорее всего юники помогут
это я так..
-
о чорт. я же совершил ошибку.
-
Да не ломайте вы копья, ОНО вопрос, вопреки вашим дельным советам, все же решило :-)
-
спасибо не надо. просто будешь должен.
-
итоговый запрос покажешь?
может по нему удастся вопрос, что же было нужно, восстановить.
-
> Сергей (21.05.15 21:12) [30]
Если ОНО решило вопрос путем проверки на клиенте, то ОНО его НЕ решило. Даже еще хуже - ОНО создало видимость решения, а решения на самом деле нет. И когда-нибудь это обязательно аукнется ошибкой.
Вам уже несколько раз сказали, что нужен constraint. И правильно сказали. Почему Вы не хотите слушать дельные советы - непонятно.
-
> Нет, не так. Я хочу исключить повторяющиеся записи.
1. Строите уникальный индекс по (p, s, n)
2. RTFM по вашему движку БД - ищете конструкцию вставки с игнорированием либо вставки с обновлением, все соверменные движки такую имеют.
Например в MySQL есть целые два варианта: INSERT IGNORE и INSERT ... ON DUPLICATE KEY UPDATE. Обе конструкции можно приспособить для игнорирования дубликатов при вставки