![]() |
|
Модераторы: skyboy |
![]()
|
|
| Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Всем здраствуйте. Стокнулся с проблемой. Можно ли как то проверить существует ли значение в таблице?
З.Ы. Программирую на ПХП. Детали: Есть таблица1 с полем uid. Я составляю запрос типа UPDATE ... WHERE uid == 1; Можно ли составить такой запрос исключительно sql: ЕСЛИ существует поле uid == 1 ТОГДА sql = UPDATE ... ИНАЧЕ ЕСЛИ uid со значением == 1 не существует тогда INSERT INTO ... Спасибо)... Надежда умирает последней -=) Это сообщение отредактировал(а) Zorak - 3.3.2013, 15:38 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
REPLACE и ON DUPLICATE KEY UPDATE вам в помощь.
Синтаксис REPLACE точно такой же, как у INSERT, но при существовании ключа указанные поля будут обновлены и не будет выброшено ошибки. ON DUPLICATE KEY UPDATE ставится после запроса INSERT и указывает на то, что следует сделать, если ключ существует. После слова UPDATE пишется запрос с обычным синтаксисом UPDATE-а. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Понял, спасибо большое... ушол разбиратся. будут вопросы еще напишу, спасибо огромное еще раз!
-------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
| Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Да получилось, но родился дополнительнй вопрос. А можно ето дело применить НЕ к уникальному ключу.. а например к полю типа text?. Т.е.
Есть значения в базе данных: 1. Так рботает отлично!: user_id (unique key) | type 1 | 1 2 | 1 3 ...... 2. А можно ли применить такоеже но примерно так: user_id (not unique key) | type 1 | 1 1 | 2 3 ...... Т.е. в запросе ON DUPLICATE KEY в конце добавить WHERE, тоесть где именно обновлять... Другими словами эти Дупликате кей у меня целых два: user_id и type... Т.е. при трех одинаковых значениях user_id есть три разных type, ну и в конце концов последнее т.е. запрос должен быть типа:
Вот ето вот AND уменя никак не получается... Когда добавляю в конце WHERE выдае ошибку -=).. Спасибо! -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
| Arantir |
|
||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Ну, вообще-то, в ключе может содержаться несколько полей. Если то, что ключевых поля 2, — это свойство самой сущности, представляемой таблицей, то лучше просто измените ключ.
Таким образом таблица по природе своей не сможет содержать 2 поля с одинаковой парой user_id-type. Добавлено через 4 минуты и 27 секунд
Это сообщение отредактировал(а) Arantir - 8.3.2013, 19:38 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
| Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Ну да, кавычки да, есть, просто писал сразу в браузер код по памяти, посиму их и пропустил.. И так... Скажу суть проблемы и как я ее хочу решить, вы поймете откуда у меня возник вопрос. В итоге может я не правильно думаю и вы посоветуете более гуманный метод решения проблемы. И так:
1. Есть игра: "ИГРА!" 2. При регистрации пользователя ему призначается id_user (например 1). 3. Есть три уровня сложности (например 11,22,33) 4. Игра быстрая и очень многоразовая, к тому же игрок каждый раз может выбрать уровень сложности и результат после окончания игры у меня запихивается у базу данных для дальнейшего вывода так сказать топ листа, Но результаты должны делится по уровню сложности. И так, отсуда и проблема.. мне надо в таблицу вписать ТРИ результата (по результату на разный уровень сложности - level) на ОДИН id_user. ИтОгО. При первом вхождении в игру с определенным уровнем надо чтобы был запрос INSERT, если это не первый раз, тогда UPDATE. Отсюда у меня и берется проблема с id_user и level... Какбы два ключевых поля, по которым определяется запрос) З.Ы. Если не понятно пишите, обьясню более доступно. Это сообщение отредактировал(а) Zorak - 8.3.2013, 20:30 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Ну так для таблицы результатов и делайте ключ с двумя полями, как я описал немного выше. Это вполне обычная практика.
ON DUPLICATE KEY берет во внимание все поля в ключе. То есть, в таблице может быть сколько угодно повторений user_id и level, но у одного юзера не может быть больше одной записи с одним и тем же уровнем. Например, у вас есть запись вида (user:1,level:low,:points:289) и вы хотите добавить 10 очков юзеру 1 на уровень low, то сработает ON DUPLICATE KEY, где вы, например, пишите UPDATE SET points += $value. И в итоге получите запись (user:1,level:low,:points:299). Если же вы добавите юзеру 1 очки на уровень high, а такого уровня у этого юзера еще нет, то сработает основной запрос и будет создана новая запись (user:1,level:high,:points:10), которая при последующих запросах будет обновляться. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Да, получилось, вроде как бы нормально все работает, спасибо большое).. будут изьяны буду писать -=)
-------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |