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]   

> Без описания
k0ma
Отправлено: 14 Августа, 2014 - 15:12:07
Post Id


Гость


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


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




Есть 2 массива.
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(697) { [0]=> array(1) { ["basic_account"]=> string(2) "60" } [1]=> array(1) { ["basic_account"]=> string(2) "61" } [2]=> array(1) { ["basic_account"]=> string(2) "62" } [3]=> array(1)

в этих массивах есть похожие данные, именно данные но не ключи (данные 60,61,62....),надо сравнить 2 массива и одинаковые значения записать в 3ий массив.
пробовал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $result1=mysql_query("select basic_account from users where id=any(select user_id from users_groups_link where group_id=100)",$conn)
  3. while($row1[]=mysql_fetch_assoc($result1));
  4. $result2=mysql_query("select id from accounts where balance<'0'", $conn);
  5. while($row2[]=mysql_fetch_assoc($result2));
  6. $results=array();
  7. foreach($row1 as $value1)
  8. {
  9.        foreach($row2 as $value2)
  10.        {
  11.               if($value1 == value2)
  12.                {
  13.                $results[$p]['id']=$value2;
  14.                $p++;
  15.                }
  16.                #else break;
  17.        }
  18. }

но получается цикл бесконечный, тыкните носом где ошибка, я думал смысл в том чтобы оба массива определить как $value1-2 и сравнивать их, и если есть похожие данные то ложить их в массив.

Вообще если это можно сделать на уровне Mysql запроса, то буду очень благодарен.
 
 Top
Мелкий Супермодератор
Отправлено: 14 Августа, 2014 - 15:23:13
Post Id



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


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


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




Быстрее и проще будет на стороне СУБД пересечение построить. Для этого напишите, что есть и что надо получить без каких-то непонятных массивов.


-----
PostgreSQL DBA
 
 Top
k0ma
Отправлено: 14 Августа, 2014 - 15:53:44
Post Id


Гость


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


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




нуу...
есть 3 таблицы из которых надо сделать выборку зависимую от других таблиц.
CODE (htmlphp):
скопировать код в буфер обмена
  1. select user_id from `users_groups_link` where group_id='100'

это выборка и таблицы по group_id=100
CODE (htmlphp):
скопировать код в буфер обмена
  1. select basic_account from `users` where id= (select user_id from `users_groups_link` where group_id='100')

это выборка из базы по прошлой базе

CODE (htmlphp):
скопировать код в буфер обмена
  1. select id=(select basic_account from `users` where id= (select user_id from `users_groups_link` where group_id='100')) from accounts where balance<'-600'";
и это последняя выборка из таблицы по прошлому ид и еще по тем у кого баланс менее -600 (минус 600).
из прошлого поста видно что я совместил 2 запроса в один, и получаю те цифры которые надо, но вот совместить 3 запроса + выборку из них по балансу неполучается, мускул ругается.

А может всетаки сделать все раздельно? нельзя никак задать один запрос в мускул, и потом его используя сделать другой запрос, но не одной строкой а в 2,3-9 строк, но я так не запутаюсь.

(Отредактировано автором: 14 Августа, 2014 - 15:57:49)

 
 Top
Tyoma5891
Отправлено: 14 Августа, 2014 - 16:00:05
Post Id


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


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


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




Ниндзя
 
 Top
Мелкий Супермодератор
Отправлено: 14 Августа, 2014 - 16:11:00
Post Id



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


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


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




k0ma пишет:
это выборка и таблицы по group_id=100

Спасибо, кэп. Как бы говоря, SQL я читать умею.

Я вижу, что что-то вы сделать пытаетесь. Меня не интересует, как вы это хотите сделать. Покажите, что у вас есть в БД, как оно между собой связано и что надо из этого получить.


-----
PostgreSQL DBA
 
 Top
k0ma
Отправлено: 14 Августа, 2014 - 17:42:11
Post Id


Гость


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


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




Мелкий пишет:
k0ma пишет:
это выборка и таблицы по group_id=100

Спасибо, кэп. Как бы говоря, SQL я читать умею.

Я вижу, что что-то вы сделать пытаетесь. Меня не интересует, как вы это хотите сделать. Покажите, что у вас есть в БД, как оно между собой связано и что надо из этого получить.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  describe accounts;
  2. +----------------------+--------------+------+-----+---------+----------------+
  3. | Field                | Type         | Null | Key | Default | Extra          |
  4. +----------------------+--------------+------+-----+---------+----------------+
  5. | id                   | int(11)      | NO   | PRI | NULL    | auto_increment |
  6. | balance              | double       | NO   |     | 0       |                |
  7. | account_name         | varchar(255) | NO   |     |         |                |
  8. | credit               | double       | NO   |     | 0       |                |
  9. | flags                | int(11)      | NO   |     | 0       |                |
  10. | is_blocked           | int(11)      | NO   |     | 0       |                |
  11.  
  12.  
  13. mysql> describe users;
  14. +----------------------+--------------+------+-----+---------+----------------+
  15. | Field                | Type         | Null | Key | Default | Extra          |
  16. +----------------------+--------------+------+-----+---------+----------------+
  17. | id                   | int(11)      | NO   | PRI | NULL    | auto_increment |
  18. | login                | varchar(255) | NO   |     | NULL    |                |
  19. | password             | varchar(255) | NO   |     |         |                |
  20. | basic_account        | int(11)      | NO   |     | NULL    |                |
  21.  
  22. mysql> describe users_groups_link;
  23. +----------+---------+------+-----+---------+----------------+
  24. | Field    | Type    | Null | Key | Default | Extra          |
  25. +----------+---------+------+-----+---------+----------------+
  26. | id       | int(11) | NO   | PRI | NULL    | auto_increment |
  27. | user_id  | int(11) | NO   |     | 0       |                |
  28. | group_id | int(11) | NO   |     | 0       |                |
  29. +----------+---------+------+-----+---------+----------------+
  30.  
  31.  

вот 3 таблицы, и их разделы. Из поста ранее видно что мы хотим сделать и как они связаны между собой. Или еще не все? что еще показать?
Хотим сделать выборку из одной таблицы, использовать в другой, потом использовать в другой, тоесть когда у людей минус 600р, то выбирались бы ИД тех пользователей и далее редактировался их статус на "заблокированный" и тд и тп

(Отредактировано автором: 14 Августа, 2014 - 17:45:35)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Августа, 2014 - 10:42:13
Post Id



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


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


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




Да отвяжитесь вы от этих ваших запросов.

Задача: выбрать те accounts.id, у которых accounts.balance < -600 и у которых у связанного через таблицу пользователей user_id указано group_id=100. Таблицы между собой связаны так и так.
Так?

ответ:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT accounts.id FROM accounts
  2. JOIN `users` ON basic_account=accounts.id
  3. JOIN `users_groups_link` ON users.id=user_id AND group_id=100
  4.  WHERE accounts.balance < -600

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


-----
PostgreSQL DBA
 
 Top
k0ma
Отправлено: 15 Августа, 2014 - 11:03:43
Post Id


Гость


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


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




to Мелкий спасибо огромное да, то что нам надо =)
я уже замучился с выборкой из массивов по средствам РНР.
Скажите где почитать про такие длинные запросы для mysql и как они пишутся?
 
 Top
Мелкий Супермодератор
Отправлено: 15 Августа, 2014 - 11:32:30
Post Id



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


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


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




Длинные? Где длинные запросы? Это простой и короткий...

Пока что лучшее, что читал для MySQL: http://www[dot]ozon[dot]ru/context/detail/id/6573935/
Не помню, правда, рассмотрено ли там написание запросов.


-----
PostgreSQL DBA
 
 Top
k0ma
Отправлено: 18 Августа, 2014 - 07:28:39
Post Id


Гость


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


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




Возникла еще необходимость внети в ваш скрипт параметр, чтобы выборка так и была по балансу но + еще чтобы у человека, по ранее выбраному ID, в таблице accounts, столб is_blocked в нем у этих людей менялся код (определенный код - определенный вид блокировки), тоесть еще будет 5 видов кодов(блокировок). Это реально?
код - число, например 16, или 768.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB