• Сергей (21.05.15 15:28) [0]
    Уважаемые мастера, есть вопрос. Имеется таблица :
    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
  • кгшзх © (21.05.15 15:32) [1]
    а при втором обращении

    уточните.
    второе обращение луны вокруг земли или солнца вокруг ядра галактики?
  • Сергей (21.05.15 15:39) [2]
    >кгшзх
    А почему первое обращение вопросов не вызвало ? Если можете ответить по существу вопроса - ответьте, если непонятен вопрос - уточните, что именно не понятно. Зачем мусорить эфир.
  • кгшзх © (21.05.15 15:44) [3]
    чтобы ответить по существу вопроса, нужно чтобы было само существо вопроса.

    а у тебя здесь только детский лепет трехлетнего малыша с какими-то цифрами и обращениями кого-то куда-то или к кому-то.
  • Плохиш © (21.05.15 15:46) [4]

    > если непонятен вопрос - уточните, что именно не понятно.

    Уточняю, чё хотите получить?
  • Inovet © (21.05.15 15:47) [5]
    Телепатирую. Нужен
    ORDER BY
  • кгшзх © (21.05.15 15:52) [6]
    не угадал.
  • кгшзх © (21.05.15 15:53) [7]
    телепатрирую. Нужен параметр и where по "s"
  • Inovet © (21.05.15 15:57) [8]
    Тогда 4 параметра и between
  • Сергей (21.05.15 16:02) [9]
    >Плохиш
    А разве я не написал, что хочу получить ? Нужен единый запрос, если это возможно. Исходные данные есть : и содержимое таблицы и то, что имеем при обращении к ней. Что еще я не дописал ?
    >кгшзх
    Пример запроса написать слабо ?
  • кгшзх © (21.05.15 16:04) [10]
    на слабо будешь одноклассниц разводить, вьюноша.
  • Сергей (21.05.15 16:14) [11]
    >кгшзх
    В таком случае хотелось бы увидеть результат, а не пустую болтавню. Получится - респект тебе, взрослый человек :-)
  • Jeer © (21.05.15 16:36) [12]
    Сергей   (21.05.15 16:14) [11]

    Приведи мысли в порядок и начни все с начала.
  • Сергей (21.05.15 16:49) [13]
    >Jeer
    Начиню сначала. Структура таблицы и ее данные есть выше.
    Нужно, чтобы в итоге единого запроса получился набор :
    в первом обращении - id=1 и id=2, во втором - id=3. Проблема в том, что n для обоих обращений пересекаются.
  • Jeer © (21.05.15 17:05) [14]
    Т.е. ты хочешь, чтобы первый раз 2*3=6, а во второй раз 2*3=5 ?
    Дошло?
  • Сергей (21.05.15 17:27) [15]
    >Jeer
    Нет, не так. Я хочу исключить повторяющиеся записи. Есть в таблице : p = 100,
    s = 5, n = 200 и 201 и пользователь снова пытается ввести аналогичное. Поэтому и хочу проверить есть ли такое. Если есть - новая запись не создается. Иными словами если p = 100,s = 5, n = 200 и 201, а пользователь выбирает туже комбинацию, то запись не должна создаваться. Но спросить о наличии такой комбинации я хочу в одном запросе(s и n могут меняться). Не хотелось бы прибегать к помощи ХП или анализа в клиенте, хотелось бы сформировать один запрос к уже имеющимся данным.
  • кгшзх © (21.05.15 17:35) [16]
    заходят два юзера.
    оба хотят вставить 100 7 300
    для обоих ты проверяешь комбинацию и обоим сообщаешь, что такой еще нет.
    и оба юзера благополучно вставляют свои 100 7 300

    /*
    а все потому что кто-то не создал констрейнт уникального индекса, а занимается херней с проверками, актуальность результатов которых уже через миллисекунду становится неактуальной */
  • Сергей (21.05.15 17:40) [17]
    >кгшзх
    Остроумие на высоте, а до дела что-то не доходит пока. Пустобрехством заниматься - не мешки ворочать. Так ведь, взрослый человек ? :-)
  • Inovet © (21.05.15 18:14) [18]
    > [17] Сергей   (21.05.15 17:40)
    > а до дела что-то не доходит пока

    Из тебя вытягивают клещами реальную проблему, вытянули нечто уже ближе к реальности, дали ответ, а ты всё ещё не видишь его. Повторю - констрейнт спасёт ОРД.
  • Плохиш © (21.05.15 18:17) [19]

    > Сергей   (21.05.15 17:40) [17]
    > >кгшзхОстроумие на высоте

    ты уже про индексы прочитал? Или так и будишь, как идиот, одно и тоже долдонить?

    > Не хотелось бы прибегать к помощи ХП или анализа в клиенте

    сколько вумных словей-то.
  • Сергей (21.05.15 18:27) [20]
    Всем спасибо за никчемные ответы.
  • Inovet © (21.05.15 18:39) [21]
    > [20] Сергей   (21.05.15 18:27)

    Ну это да - умные благоразумные мальчиши-кибальчиши дают код, а здесь одни плохиши дают никчёмные советы. Жаль.
  • кгшзх © (21.05.15 18:41) [22]
    при первом обращении 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

    что и требовалось в идиотском как бы вопросе, как бы детально и как бы конкретно как бы поставленном как бы по существу.
  • Inovet © (21.05.15 18:55) [23]
    > [22] кгшзх ©   (21.05.15 18:41)

    Ты тоже плохиш, но код дал. Жаль.
  • кгшзх © (21.05.15 19:08) [24]
    этот код ему не поможет потому что нужен другой код, даже если проверку уникальности делать с клиента.
    потому и дал.
  • Inovet © (21.05.15 19:38) [25]
    > [24] кгшзх ©   (21.05.15 19:08)
    > этот код ему не поможет

    Я же сказал - плохиш.
  • ухты © (21.05.15 20:11) [26]

    > что и требовалось
    да нет, -

    > я хочу в одном запросе(s и n могут меняться).
    , т.е. 1 запрос, а у вас уже 2, и только для n
  • кгшзх © (21.05.15 20:22) [27]
    да дад.

    Вот исходное:

    Уважаемые мастера, есть вопрос. Имеется таблица :
    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] предельно точно отвечено.
    Могу приложить нотариально заверенный скриншот результата обеих "обращений"
  • ухты © (21.05.15 20:32) [28]
    ну так n это те что 200 2001 а у вас 5 6, тоже не правильно, запросы никогда ничего не вернут :)

    что человеку надо мне не понятно тоже, скорее всего юники помогут
    это я так..
  • кгшзх © (21.05.15 20:49) [29]
    о чорт. я же совершил ошибку.
  • Сергей (21.05.15 21:12) [30]
    Да не ломайте вы копья, ОНО вопрос, вопреки вашим дельным советам, все же решило :-)
  • кгшзх © (21.05.15 21:19) [31]
    спасибо не надо. просто будешь должен.
  • sniknik © (21.05.15 21:24) [32]
    итоговый запрос покажешь?
    может по нему удастся вопрос, что же было нужно, восстановить.
  • Юрий Зотов © (22.05.15 14:40) [33]
    >  Сергей   (21.05.15 21:12) [30]

    Если ОНО решило вопрос путем проверки на клиенте, то ОНО его НЕ решило. Даже еще хуже - ОНО создало видимость решения, а решения на самом деле нет. И когда-нибудь это обязательно аукнется ошибкой.

    Вам уже несколько раз сказали, что нужен constraint. И правильно сказали. Почему Вы не хотите слушать дельные советы - непонятно.
  • ~AQUARIUS~ (29.05.15 15:36) [34]

    > Нет, не так. Я хочу исключить повторяющиеся записи.


    1. Строите уникальный индекс по (p, s, n)
    2. RTFM по вашему движку БД - ищете конструкцию вставки с игнорированием либо вставки с обновлением, все соверменные движки такую имеют.
    Например в MySQL есть целые два варианта: INSERT IGNORE и INSERT ... ON DUPLICATE KEY UPDATE. Обе конструкции можно приспособить для игнорирования дубликатов при вставки
Есть новые Нет новых   [119256   +38][b:0.001][p:0.001]