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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE и SELECT в одном запросе 
:(
    Опции темы
korob2001
Дата 14.7.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Привет!!!
У меня такой вопрос:
Есть 3 таблицы:
Код

Table: Users
 ====== ============ =================
|  Id  |     Name   |     Surname     |
 ====== ============ =================
|   4  |    Jan     |     Backer      |
 ------ ------------ -----------------
|   6  |   Sofie    |     Janssen     |
 ------ ------------ -----------------
|  14  |   Daniel   |     Forest      |
 ------ ------------ -----------------

Table: StandardLib
 ====== ==============================
|  Id  |            Photo             |
 ====== ==============================
|   1  |          stPhoto1.gif        |
 ------ ------------------------------
|   2  |          stPhoto2.jpg        |
 ------ ------------------------------
|   3  |          stPhoto3.jpg        |
 ------ ------------------------------

Table: UsersPhotos
 ====== ==============================
|  Id  |            Photo             |
 ====== ==============================
|  14  |          stPhoto3.jpg        |
 ------ ------------------------------

Первая содержит имена пользователей, вторая имена изображений стандартной галереи, третья содержит id пользователя и имя файла, которое выбрал себе пользователь, так же есть две переменные:
Код

my $user_id = 14;   # Id пользователя
my $new_ph = 2;    # Id изображения

Так же прошу обратить внимание на то, что в таблице UsersPhotos поле Id не является PRIMARY KEY.
Мне необходимо построить такой запрос: Если в таблице UsersPhotos есть запись с Id равным $user_id, тогда выполнить UPDATE, если же записи с таким Id нет, выполнить INSERT.

Решил сделать так:
1. Пытаюсь выполнить UPDATE.
2. Если выполнить первый пункт не удалось, значит записи нет с таким Id и выполняю INSERT.

C INSERT вроде разобрался:
Код

INSERT INTO UsersPhotos (Id, Photo) SELECT * FROM StandardLib WHERE Id='$new_ph'

Правда я пока не уверен в его правильности.

Проблема с запросом на UPDATE, можно было бы конечно сначала SELECT'ом выбрать имя файла из таблицы StandardLib, а затем написать запрос такого плана:
Код

UPDATE UsersPhotos SET Id='$user_id', Photo='$newpath' WHERE Id='$user_id'

Где переменная $newpath равна пути, который соответствует $new_ph.

Но мне почему-то кажется, что всю эту байду можно объединить в один запрос, я имею ввиду SELECT и UPDATE, т.е. примерно так:
Код

UPDATE UsersPhotos SET Id='$user_id',
             Photo=(SELECT Photo FROM StandardLib WHERE Id='$new_ph') WHERE Id='$user_id'

Но, что-то нифига не работает, что-то я совсем запутался. smile
Подскажите, где ошибки?

Спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Irokez
Дата 14.7.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

Репутация: 5
Всего: 53



Цитата(korob2001 @ 14.7.2005, 13:57)
Подскажите, где ошибки?

по-моему, потому что внутренний select может возвратить не одно значение.. может попробовать поставить: limit 1
PM   Вверх
korob2001
Дата 14.7.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Спасибо. smile С UPDATE, всё оказалось впорядке, была программная ошибка. LIMIT 1 я вставил, хотя Id не повторяется в этой таблице. Но вот теперь проблема с INSERT. Тот запрос, который я написал выше, не работает, точнее работает, но не верно. Он вставляетя в последнюю таблицу Id фотографии и имя файла, а мне нужно вставить Id пользователя и имя файла, которое должен определить внутренний SELECT.
Пробую написать так:
Код

INSERT INTO UsrersPhotos (Id, Photo) 
      VALUES ('$user_id', (SELECT Photo FROM StandardLib WHERE Id='$new_ph' LIMIT 1))

Но таким образом отказывается работать, пишет: Ошибка в sql запросе.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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