Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> существует ли значение 
:(
    Опции темы
Zorak
Дата 3.3.2013, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 3.3.2013, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 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
}
PM   Вверх
Zorak
Дата 3.3.2013, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Понял, спасибо большое... ушол разбиратся. будут вопросы еще напишу, спасибо огромное еще раз!


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Zorak
Дата 8.3.2013, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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, ну и в конце концов последнее т.е. запрос должен быть типа:
Код

UPDATE ... WHERE user_id = $uid and type = $type

Вот ето вот AND уменя никак не получается... Когда добавляю в конце WHERE выдае ошибку -=).. Спасибо!



--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 8.3.2013, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: нет
Всего: 55



Ну, вообще-то, в ключе может содержаться несколько полей. Если то, что ключевых поля 2, — это свойство самой сущности, представляемой таблицей, то лучше просто измените ключ.
Код
ALTER TABLE mytable DROP PRIMARY KEY, ADD PRIMARY KEY (field1, field2);

Таким образом таблица по природе своей не сможет содержать 2 поля с одинаковой парой user_id-type.

Добавлено через 4 минуты и 27 секунд
Код

UPDATE ... WHERE user_id = $uid and type = $type
А type — числовое поле? Ибо для строк надо кавычки.

Это сообщение отредактировал(а) Arantir - 8.3.2013, 19:38


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Zorak
Дата 8.3.2013, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Arantir
Дата 8.3.2013, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 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
}
PM   Вверх
Zorak
Дата 8.3.2013, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 720
Регистрация: 13.11.2007

Репутация: нет
Всего: 3



Да, получилось, вроде как бы нормально все работает, спасибо большое).. будут изьяны буду писать -=)


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.