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 :: Ошибка #1242 - Subquery returns more than 1 row

 PHP.SU

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


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

> Описание: описание))
Alexander Goryachij
Отправлено: 07 Февраля, 2013 - 08:20:43
Post Id



Новичок


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


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




результат запроса - #1242 - Subquery returns more than 1 row
а мне от него как раз и нужно чтоб он выдавал "more tnan 1 row", помогите начинающему программисту Радость

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT c.department, b.aux_build, b.tnum, d.surname, d.name, d.secondname, d.birthday, d.sex, b.tld_1, b.tld_2, b.priznak, sum( a.hp10_gamma + a.hp10_n ) AS dose_summa
  2. FROM dose_rados a, tld_num b, perehod c, pers_idk d WHERE b.tnum = ( SELECT DISTINCT tnum FROM tld_num WHERE tnum<>'0' ) AND c.tnum = d.tnum AND b.tnum = d.tnum
  3. AND b.priznak NOT LIKE 'фон' AND ( a.dosim_num = b.tld_1 OR a.dosim_num = b.tld_2 )
  4. AND a.date_change >= '$year' AND a.date_change <= '$end_date' HAVING dose_summa >=10


Отредактировано модератором: Мелкий, 07 Февраля, 2013 - 08:57:13
 
 Top
Stierus Супермодератор
Отправлено: 07 Февраля, 2013 - 08:30:56
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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





замени на
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE b.tnum IN ( SELECT
 
My status
 Top
Alexander Goryachij
Отправлено: 07 Февраля, 2013 - 08:51:55
Post Id



Новичок


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


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




Stierus пишет:
замени на
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE b.tnum IN ( SELECT


я так пробовал уже, запрос вернул 1 строку со случайным name surname...и т.д. и просуммировал все значения dose_summa .... я в тупике)))
 
 Top
Stierus Супермодератор
Отправлено: 07 Февраля, 2013 - 09:17:55
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




ты написал ошибку - я написал как от нее избавиться, какие проблемы с логикой запроса - другой вопрос, на него я смогу отвечать только когда узнаю, что ты от запоса хочешь
 
My status
 Top
Alexander Goryachij
Отправлено: 07 Февраля, 2013 - 09:30:43
Post Id



Новичок


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


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




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


От этого запроса требуется чтоб он выдал каждого чела, у которого dose_summa >=10 за заданный период времени..
 
 Top
imya
Отправлено: 07 Февраля, 2013 - 09:36:38
Post Id



Участник


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


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




Alexander Goryachij пишет:
От этого запроса требуется чтоб он выдал каждого чела, у которого dose_summa >=10 за заданный период времени..


Так ведь можно это одним запросом сделать, без подзапроса


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


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Alexander Goryachij
Отправлено: 07 Февраля, 2013 - 09:45:38
Post Id



Новичок


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


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




imya пишет:
Alexander Goryachij пишет:
От этого запроса требуется чтоб он выдал каждого чела, у которого dose_summa >=10 за заданный период времени..


Так ведь можно это одним запросом сделать, без подзапроса


Я с вами согласен - можно вот даже пример такого запроса
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT perehod.department, perehod.aux_build, doz_tld.tnum,
  2.    pers_idk.surname, pers_idk.name, pers_idk.secondname,
  3.    pers_idk.sex, pers_idk.birthday, SUM( doz_tld.dose ) AS dose_summa  
  4.    FROM doz_tld, pers_idk, perehod WHERE doz_tld.date >= '$year' AND doz_tld.date <= '$end_date'
  5.    AND perehod.department NOT LIKE 'КОМАНД' AND ( doz_tld.date <= perehod.date_out OR perehod.date_out IS NULL )
  6.    AND doz_tld.tnum = pers_idk.tnum AND pers_idk.tnum = perehod.tnum GROUP BY tnum HAVING dose_summa >=10
 
 Top
Stierus Супермодератор
Отправлено: 07 Февраля, 2013 - 10:45:30
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.         c.department,
  3.         b.aux_build,
  4.         b.tnum,
  5.         d.surname,
  6.         d.name,
  7.         d.secondname,
  8.         d.birthday,
  9.         d.sex,
  10.         b.tld_1,
  11.         b.tld_2,
  12.         b.priznak,
  13.         sum( a.hp10_gamma + a.hp10_n ) AS dose_summa
  14. FROM tld_num b
  15. INNER JOIN pers_idk d  ON d.tnum = b.tnum
  16. INNER JOIN perehod c ON c.tnum = d.tnum
  17. INNER JOIN dose_rados a ON a.dosim_num = b.tld_1 OR a.dosim_num = b.tld_2
  18.  
  19. WHERE b.tnum <>'0'
  20. AND b.priznak NOT LIKE 'фон'
  21. AND a.date_change BETWEEN '$year' AND '$end_date'
  22. AND sum( a.hp10_gamma + a.hp10_n ) >=10


Твой запрос, нормально оформленный, без структуры таблиц, не могу протестить
 
My status
 Top
Alexander Goryachij
Отправлено: 08 Февраля, 2013 - 08:24:03
Post Id



Новичок


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


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




спасибо! я решил вопрос - добавил в таблицу dose_rados поле tnum
и выполнив запрос
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE dose_rados, tld_num SET dose_rados.tnum=tld_num.tnum
  2.  WHERE dose_rados.dosim_num=tld_num.tld_1 OR dose_rados.dosim_num=tld_num.tld_2


возможно есть еще способы..)

-------------------------------- -------------------------------- -------------------------------- ------------

== Table structure for table dose_rados

|------
|Field|Type|Null|Default
|------
|tnum|int(11)|Yes|NULL
|dosim_num|bigint(6)|Yes|NULL
|date_change|date|Yes|NULL
|burning|int(3)|Yes|NULL
|hp10_gamma|float(8,4)|Yes|NULL
|hp_surface|float(8,4)|Yes|NULL
|hp007|float(8,4)|Yes|NULL
|hp10_n|float(8,4)|Yes|NULL
|date|date|Yes|NULL
|time|time|Yes|NULL
|reader|text|Yes|NULL
|operator|text|Yes|NULL
== Table structure for table dose_rados

-------------------------------- -------------------------------- -------------------------------- -----------

== Table structure for table perehod

|------
|Field|Type|Null|Default
|------
|tnum|int(11)|Yes|NULL
|enterprise|text|No|
|department|text|Yes|NULL
|aux_build|int(11)|No|
|trip|tinyint(1)|No|
|category|text|No|
|critical_group|tinyint(1)|No|
|cassette|int(11)|Yes|NULL
|shop|text|Yes|NULL
|post|text|Yes|NULL
|date_in|date|Yes|NULL
|date_out|date|Yes|NULL
|conditions|text|Yes|NULL
|date_op|date|Yes|NULL
|time_op|time|Yes|NULL
|operator|text|No|
== Table structure for table perehod

-------------------------------- -------------------------------- -------------------------------- -----------

== Table structure for table pers_idk

|------
|Field|Type|Null|Default
|------
|inn|int(10)|Yes|NULL
|tnum|int(11)|Yes|NULL
|surname|text|Yes|NULL
|name|text|Yes|NULL
|secondname|text|Yes|NULL
|sex|tinytext|Yes|NULL
|birthday|date|Yes|NULL
|bodycounter|tinyint(1)|Yes|NULL
|medical|tinyint(1)|No|
|medical_date|date|No|
|examination|tinyint(1)|No|
|exam_date|date|No|
|pregnancy|tinyint(1)|Yes|NULL
|dose_before_npp|float|Yes|NULL
|dose_before_where|text|Yes|NULL
|passport|text|Yes|NULL
|photo|blob|Yes|NULL
|date_op|date|Yes|NULL
|time_op|time|Yes|NULL
|operator|text|No|
== Table structure for table pers_idk
-------------------------------- -------------------------------- -------------------------------- ----------

== Table structure for table tld_num

|------
|Field|Type|Null|Default
|------
|tnum|int(11)|No|
|tld_1|int(7)|No|
|tld_2|int(7)|No|
|priznak|text|No|
|cass_tl|int(7)|No|
|aux_build|tinyint(2)|No|
== Table structure for table tld_num
 
 Top
flash_br
Отправлено: 29 Ноября, 2014 - 17:32:51
Post Id


Новичок


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


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




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

Дело вот в чём .. очень нужно сделать запрос типа (LIKE IN)

вот есть рабличка
---------------------------
| id | marka | tsk |
---------------------------
| 1 | опель | GM |
| 2 | шевроле| GM |
---------------------------
(сорри за корявую псевдографику)

я делаю запрос в другой таблице с обращением сюда

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `marka_am`, `tsk`  FROM `import_sales_2014-11-28` WHERE `tsk` = 'GM' AND `marka_am` LIKE  (SELECT `marka` FROM `marki_tsk_sales` WHERE `tsk` = 'GM')
  3.  


и логично, что он мне отвечает

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. Subquery returns more than 1 row
  3.  


а мне так и надо т.к. в поле `marka_am` содержатся строки типа "Опель Астра, Опель Корса, Шевроле Кобальт, Шевроле нива" и т.д. и выбрать надо только то, что совпадпет с МАРКОЙ содержащейся в первой табличке ... тут скорее всего как-то регуляркой .... но я не знаю как .. интернеты копал целый день ... прошу помощи )))

(Отредактировано автором: 29 Ноября, 2014 - 17:34:19)

 
 Top
Viper
Отправлено: 29 Ноября, 2014 - 17:40:30
Post Id



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


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


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




flash_br пишет:
очень нужно сделать запрос типа (LIKE IN)
в чем смысл делать LIKE если у вас марки авто не в тексте, а "как есть"?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2014 - 17:43:39
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Вы пытаетесь странным образом сделать join?

И всё-таки у нас не принято поднимать старые темы, открыть новую предпочтительнее. Об этом даже должно было быть написано рядом с полем комментария.


-----
PostgreSQL DBA
 
 Top
flash_br
Отправлено: 29 Ноября, 2014 - 17:50:17
Post Id


Новичок


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


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




Viper пишет:
в чем смысл делать LIKE если у вас марки авто не в тексте, а "как есть"?


мне по факту нужен LIKE '%%' что бы из списка машин выбрать те, которые соответствуюс списку перечисленных марок, а их может быть мноооого .. перечислять все - не удобно
(Добавление)
Мелкий пишет:
И всё-таки у нас не принято поднимать старые темы, открыть новую предпочтительнее. Об этом даже должно было быть написано рядом с полем комментария.


Возможно и JOIN )))) но не понимаю как)))

А про оживление темы - пардоньте ))) наверное просто не заметил, где это написано .. (((
 
 Top
Viper
Отправлено: 29 Ноября, 2014 - 17:54:27
Post Id



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


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


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




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


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
flash_br
Отправлено: 29 Ноября, 2014 - 22:19:44
Post Id


Новичок


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


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




первая имеет такой вид
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. marka   tsk    
  3. Опель   ТСК GM
  4. Шевроле ТСК GM
  5.  


вторая такой
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. marka_am        tsk    
  3.        
  4. Шевроле Нива    ТСК GM
  5. Шевроле Лач     ТСК GM
  6. Опель Корса     ТСК GM
  7. Шевроле Нива    ТСК GM
  8. Шевроле         ТСК GM
  9. Опель Астра     ТСК GM
  10. Шевроле Коб     ТСК GM
  11. Хендай Солярис  ТСК GM
  12. Ниссан Жук      ТСК GM
  13.  


1. на выходе мне нужно посчиать количество машин из второй таблицы, марки которых есть в первой таблице (ну тут в принципе проблем нет)
2. И потом посчитать все остальные, марок которых нет в первой таблице (вот и из-за этого я и заморочился вопросом про нечто вроде LIKE IN ... т.к. сначала можно было бы сделать LIKE IN ****, а потом NOT LIKE IN ***)
 
 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