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 :: Вложенный запрос

 PHP.SU

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


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

> Без описания
lastdays
Отправлено: 08 Марта, 2014 - 22:27:50
Post Id



Частый гость


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


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




Не выходит составить запрос, помогите пожалуйста.

Есть таблица
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,`name`,`arr` FROM `table` WHERE  `id`=1 LIMIT 1


Данные в ячейке arr = 33,34,35,36,3;
explode(",",$data["arr"]);
вывожу через
foreach и после приходится получать данные по каждому айди.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,`name` FROM `table` WHERE `id`= 33
  2. SELECT `id`,`name` FROM `table` WHERE `id`= 34
  3. SELECT `id`,`name` FROM `table` WHERE `id`= 35
  4. SELECT `id`,`name` FROM `table` WHERE `id`= 36
  5. SELECT `id`,`name` FROM `table` WHERE `id`= 3


можно ли объединить запрос?
 
 Top
OrmaJever
Отправлено: 08 Марта, 2014 - 22:31:42
Post Id



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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,`name` FROM `table` WHERE `id`IN (33, 34, 35)


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
lastdays
Отправлено: 08 Марта, 2014 - 22:36:46
Post Id



Частый гость


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


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




Виноват, что не пояснил ситуацию лучше.
Я получаю 1-й айди.
Строю по полученным данным страничку.


Страница $data["name"]

а ниже, в блоке, мне необходимо вывести то, что находится в arr , получив при этом данные по айди 1.
Что-то я туплю видимо и запрос как ни крути нужно повторно.
Пойду посплю, спасибо.

UPDATE:
PHP:
скопировать код в буфер обмена
  1.  
  2. //Как есть сейчас:
  3.  
  4. $data = $db->query("SELECT `id`,`name`,`arr` FROM `table` WHERE `id`=1");
  5.  
  6. echo 'Страница: '.$data["name"];
  7.  
  8. $arr  = explode(",",$data["arr"]);
  9. foreach($arr as $k){   
  10. $b = array();
  11. $b = $db->query("SELECT `id`,`name` FROM `table` WHERE `id`= '".$k."' ");
  12. }
  13. $ab[] = $b;

(Отредактировано автором: 08 Марта, 2014 - 22:43:08)

 
 Top
OrmaJever
Отправлено: 08 Марта, 2014 - 22:56:53
Post Id



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


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


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




я знаю что найдутся те кто соберёт это в один запрос, но вот вам пока 2 запроса.
PHP:
скопировать код в буфер обмена
  1. $data = $db->query("SELECT `id`,`name`,`arr` FROM `table` WHERE `id`=1");
  2. $b = $db->query("SELECT `id`,`name` FROM `table` WHERE `id`IN ({$data["arr"]})");


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
lastdays
Отправлено: 08 Марта, 2014 - 23:14:13
Post Id



Частый гость


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


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




Да, спасибо, сократил код и кол-во запросов.
Но на вариант с вложенным запросом, посмотрел бы.
 
 Top
OrmaJever
Отправлено: 08 Марта, 2014 - 23:17:03
Post Id



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


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


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




я думаю что-то типа
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,`name` FROM `table` WHERE `id`IN (SELECT `arr` FROM `table` WHERE `id`=1 LIMIT 1)

но это предположение, и как я понимаю вам с первого запроса нужно ещё и id и name


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 08 Марта, 2014 - 23:58:02
Post Id


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


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


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




тут явно надо вынести arr в отдельную таблицу связи
(Добавление)
CODE (SQL):
скопировать код в буфер обмена
  1. `id`IN (SELECT `arr` FROM `table` WHERE `id`=1 LIMIT 1)

такое не сработает
2 запроса и не париться как альтернатива таблицы связи )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB