Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка в запросе SQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Newuser007
Отправлено: 19 Января, 2014 - 15:07:38
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Всем привет, для начала сам запрос


SQL:
скопировать код в буфер обмена
UPDATE `user_db` SET `guid` = ((select distinct `id` from `userdb_backup` where ((select distinct `id` from `userdb_backup`) in (select `guid` from `registered_users`))));

проблема состоит в том, что один разработчик(мой бывший друг) решил мне насолить и удалил всех пользователей из базы, теперь я хочу восстановить пользователей, вот только с запросом проблемы, вот собственно сама ошибка


SQL:
скопировать код в буфер обмена
 Ошибка SQL (1242): Subquery returns more than 1 row 

прошу помочь, так как базу доверять никому пока не могу, а сам слабенько владею SQL

Добавил: Мне нужно в таблице `user_db` в колонку `guid` записать значения колонки `id` из таблицы `userdb_backup` с условием что `id` в `userdb_backup` будут = `guid` в таблице `registered_users`.

(Отредактировано автором: 19 Января, 2014 - 16:08:01)

 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Января, 2014 - 15:25:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




 
 Top
Newuser007
Отправлено: 19 Января, 2014 - 15:48:36
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




armancho7777777 пишет:
http://www.sql.ru/forum/981805/oshibka-1242-subquery-returns-more-than-1-row

спасибо за ответ, но я это уже читал, я прежде чем написать сюда, просидел не мало часов в прочтении информации об этом и в попытках исправить, написал сюда в надежде что кто нибудь сможет помочь в решении этой проблемы, или может найдется умелец который построит запрос правильно.
 
 Top
imya
Отправлено: 20 Января, 2014 - 09:26:27
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




Сделайте в цикле ваши запросы. Тогда поочерёдно запишутся все нужные вам значения.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
eai
Отправлено: 20 Января, 2014 - 09:35:12
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Как правило вложенные запросы являются ошибкой сами по себе.

Какая структура у registered_users и userdb_backup (где что лежит)
И почему просто не вставить записи из userdb_backup ?
 
 Top
imya
Отправлено: 20 Января, 2014 - 10:12:47
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




eai пишет:
Как правило вложенные запросы являются ошибкой сами по себе.

Смотря где и как их применять.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
eai
Отправлено: 20 Января, 2014 - 10:40:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




imya пишет:
eai пишет:
Как правило вложенные запросы являются ошибкой сами по себе.

Смотря где и как их применять.
 
 Top
Newuser007
Отправлено: 20 Января, 2014 - 11:49:55
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




eai пишет:
Какая структура у registered_users и userdb_backup

ТИП: Таблица, Тип таблицы: MyISAM, Row Формат: Dynamic
в таблицах есть колонки с ID юзеров, registered_users - здесь записаны снова же только ID зарегестрированных и не забаненых т.е. если кто либо был забанен то его при бане удаляло из этой таблицы. userdb_backup - бэкап всех юзеров, т.е. и забаненых и всех остальных, в таблице только ID.
eai пишет:
И почему просто не вставить записи из userdb_backup ?

потому что не хочу забаненых вводить снова в список, плюс они смогут снова зарегестрироватся и пользоватся сайтом, так сказать второй шанс.
 
 Top
eai
Отправлено: 20 Января, 2014 - 11:53:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Newuser007 пишет:

потому что не хочу забаненых вводить снова в список, плюс они смогут снова зарегестрироватся и пользоватся сайтом, так сказать второй шанс.


Какие колонки есть ?
Например
userdb_backup
ID
NAME
EMAIL


registered_users
ID
NAME
EMAIL
REGISTERED_DATE


P.S.
У вас задатки системного программиста Улыбка
 
 Top
Newuser007
Отправлено: 20 Января, 2014 - 11:53:49
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




imya пишет:
Смотря где и как их применять.
-----
PHP:
скопировать код в буфер обмена
CODE (htmlphp):
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


простите, но я через веб не могу, потому что сервер я отключил и он у меня дома, до тех пор пока не исправим. Но всё равно спасибо.

У меня прямой доступ, но если через веб скажем путь будет легче это сделать, то я буду рад выслушать.
(Добавление)
eai пишет:
Newuser007 пишет:

потому что не хочу забаненых вводить снова в список, плюс они смогут снова зарегестрироватся и пользоватся сайтом, так сказать второй шанс.


Какие колонки есть ?
Например
userdb_backup
ID
NAME
EMAIL


registered_users
ID
NAME
EMAIL
REGISTERED_DATE


P.S.
У вас задатки системного программиста Улыбка


в любой из этих таблиц колонки одинаковы - колонки:
GUID - тот же ID только после обновлений так сказать для случаев с мошенничеством, делал проверку на сайте путем сравнения двух таблиц.
ID - те же что и выше только выданные при регистрации.
LOGIN - думаю и так ясно
MAIL - тут тоже
DATE - Дата регистрации
PREM - тип аккаунта

(Отредактировано автором: 20 Января, 2014 - 12:05:28)

 
 Top
eai
Отправлено: 20 Января, 2014 - 12:06:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Newuser007 пишет:


в любой из этих таблиц колонки одинаковы - колонки:
GUID - тот же ID только после обнослений так сказать для случаев с мошенничеством, делал проверку на сайте путем сравнения двух таблиц.
ID - те же что и выше только выданные при регистрации.
LOGIN - думаю и так ясно
MAIL - тут тоже
DATE - Дата регистрации
PREM - тип аккаунта


Если я правильно понимаю то в registered_users лежат те которые не заблокированы
Если да то вам достаточно просто вставить все записи из registered_users в user_db

PHP:
скопировать код в буфер обмена
  1. INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,ID,LOGIN,MAIL,DATE,PROM FROM registered_users


При этом учтите что одноразового запуска этой команды достаточно для полного восстановления
 
 Top
Newuser007
Отправлено: 20 Января, 2014 - 12:20:55
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




eai пишет:
PHP:
скопировать код в буфер обмена
CODE (htmlphp):
скопировать код в буфер обмена
  1.  INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,ID,LOGIN,MAIL,DATE,PROM FROM registered_users
  2.  

При этом учтите что одноразового запуска этой команды достаточно для полного восстановления

Дя восстановления вы правы, этого достаточно, для восстановления я так же мог просто создать копию таблицы registered_users назвав её user_db, но проблема в том что я не хочу перетаскивать ID на ID, мне нужно из колонки GUID перетащить записи в колонку ID.

(Отредактировано автором: 20 Января, 2014 - 12:21:28)

 
 Top
eai
Отправлено: 20 Января, 2014 - 12:22:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1.  INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,GUID,LOGIN,MAIL,DATE,PROM FROM registered_users
  2.  


Не ?
 
 Top
Newuser007
Отправлено: 20 Января, 2014 - 12:28:13
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




eai пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,GUID,LOGIN,MAIL,DATE,PROM FROM registered_users
  2.  


Не ?


я не знал что так можно, спасибо, выучил что то новое, пойду пробывать, отпишусь как попробую.
(Добавление)
а можно ли сделать запрос типа?
CODE (htmlphp):
скопировать код в буфер обмена
  1. INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,GUID,LOGIN,MAIL,DATE,PROM FROM registered_users

но чтоб была проверка совпадения чисел
CODE (htmlphp):
скопировать код в буфер обмена
  1. INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT GUID,GUID,LOGIN,MAIL,DATE,PROM FROM registered_users ((выполнить если
  2. колонка ID из registered_users = колонке GUID из userdb_backup))


не получается написать просто, как ни пробывал вылетает ошибка, может я где то допускаю ошибку при написании, если можете напишите код, буду благодарен.
(Добавление)
я пробывал вот так
CODE (htmlphp):
скопировать код в буфер обмена
  1. REPLACE INTO `user_db`  VALUES
  2. select b.id, b.GUID,  c.LOGIN, c.MAIL, c.DATE, c.PROM  from registered_users a, userdb_backup b
  3. left join user_db c on c.guid = a.guid
  4. where a.guid = b.id

(Отредактировано автором: 20 Января, 2014 - 12:40:35)

 
 Top
eai
Отправлено: 20 Января, 2014 - 12:56:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3. INSERT INTO user_db (GUID,ID,LOGIN,MAIL,DATE,PROM) SELECT A.GUID,A.GUID,A.LOGIN,A.MAIL,A.DATE,A.PROM FROM registered_users A
  4. INNER JOIN userdb_backup B ON A.ID = B.GIUD
  5.  
  6.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB