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]   

> Без описания
Extazy
Отправлено: 01 Апреля, 2011 - 16:47:34
Post Id


Посетитель


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


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




Здравствуйте.
Подскажите, пожалуйста, почему не работает код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require("db.php");
  3. $query = mysql_query("SELECT * FROM `users`");
  4. $row = mysql_num_rows($query);
  5. print "<ol>";
  6. for($c=0; $c<$row; $c++)
  7. {
  8.         $user_id=mysql_result($query,$c,0);
  9.         $user_archives = array();
  10.         $user_archives1 = mysql_query("SELECT `id` FROM `archives` WHERE `user_id`='$user_id'");
  11.         $row2 = mysql_num_rows($user_archives1);
  12.         for($k=0; $k<$row2; $k++)
  13.         {
  14.             $user_archives[] = $row['id'];
  15.         }
  16.  
  17.         $balans1 = mysql_query ("SELECT SUM(cost) from stat WHERE `id_archive` IN ('".implode("','", $user_archives)."')");
  18.         $balans = mysql_result( $balans1, 0 );
  19.  
  20.         $login = mysql_result($query,$c,1);
  21.         print $balans;
  22.         print "<li>".$login.($balans)."</li>";
  23. }
  24. print "</ol>";
  25. ?>


$login выводит, а $balans не хочет.
Подскажите как проверить всё ли я правильно ввёл.. или может сразу видна гдето ошибка???

(Отредактировано автором: 01 Апреля, 2011 - 16:50:01)

 
 Top
grefon
Отправлено: 01 Апреля, 2011 - 17:13:12
Post Id



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


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


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




Ох ты ж Ё!!! Кто Вас учил так делать выборку из базы данных?

(Отредактировано автором: 01 Апреля, 2011 - 17:17:51)



-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Extazy
Отправлено: 01 Апреля, 2011 - 17:20:03
Post Id


Посетитель


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


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




учебники какието.. может старые очень..
подскажите, что неправильно?
 
 Top
emslt
Отправлено: 01 Апреля, 2011 - 17:34:36
Post Id



Новичок


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


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




Что то такой крутой код что я ничего не понял.
Напишите сперва что именно вы хотите сделать?
Какие столбцы есть в таблице.
Полагаю быстрее будет написать заново правильный код чем исправлять. Улыбка
 
 Top
Extazy
Отправлено: 01 Апреля, 2011 - 17:45:25
Post Id


Посетитель


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


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




имеется 2 таблицы.
1ая содержит список пользователей.
вторая список архивов - у каждого указан ID пользователя, к которому он относится, И стоимость архива.

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


Описываю код:
================================ ======
выбираю таблицу с пользователями:


подсчитываю колво пользователей, вывожу число строк и начинаю цикл for
PHP:
скопировать код в буфер обмена
  1. $row = mysql_num_rows($query);
  2. print "<ol>";
  3. for($c=0; $c<$row; $c++)


из таблицы archives выбираю ID записей, которые относятся к пользователю.
подсчитываю колво строк и все ID заношу в $user_archives.

PHP:
скопировать код в буфер обмена
  1. $user_id=mysql_result($query,$c,0);
  2.         $user_archives = array();
  3.         $user_archives1 = mysql_query("SELECT `id` FROM `archives` WHERE `user_id`='$user_id'");
  4.         $row2 = mysql_num_rows($user_archives1);
  5.         for($k=0; $k<$row2; $k++)
  6.         {
  7.             $user_archives[] = $row['id'];
  8.         }


из другой табоицы `stat` нахожу сумму значений всех полей `cost`, которе имеют такой же `id`, что и в $user_archives
PHP:
скопировать код в буфер обмена
  1.  $balans1 = mysql_query ("SELECT SUM(cost) from stat WHERE `id_archive` IN ('".implode("','", $user_archives)."')");
  2.         $balans = mysql_result( $balans1, 0 );



И вывожу на экран список пользователей и я рядом
 
 Top
grefon
Отправлено: 01 Апреля, 2011 - 18:01:35
Post Id



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


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


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




Набросал такой вариант, но не проверял. Думаю принцип будет понятен:
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM users") or die (mysql_error());
  2. echo "<ol>";
  3. while ( $row = mysql_fetch_array($result) ) {
  4.  
  5.         $result2 = mysql_query("SELECT id FROM archives WHERE user_id='".$row['id']."'") or die (mysql_error());
  6.         while ( $temp = mysql_fetch_array($result2) ) {
  7.                 $user_archives[] = $temp['id'];
  8.         }
  9.        
  10.         $result3 = mysql_query("SELECT SUM(cost) from stat WHERE id_archive IN ('".implode("','", $user_archives)."')") or die (mysql_error());
  11.         $temp2 = mysql_fetch_array($result3);
  12.        
  13.         $login = $row['user']; // user замените на свой столбик
  14.         $balans = $temp2[0];
  15.        
  16.         echo "<li>".$login."(".$balans.")</li>";
  17.        
  18. }
  19. echo "</ol>";
  20.  


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
emslt
Отправлено: 01 Апреля, 2011 - 18:05:25
Post Id



Новичок


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


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




Во блин. Улыбка Пока я думал как и что на писать уже grefon всё написал. Улыбка

Extazy - очень важно по максимум пользоваться уже готовыми функциями SQL языка так как это ускоряет выборку данных на большой Базе.
 
 Top
Extazy
Отправлено: 01 Апреля, 2011 - 18:08:20
Post Id


Посетитель


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


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




grefon, по Вашему коду выводит список пользователей и рядом одну и ту же сумму. А должны быть разные.
Думаю почему...
(Добавление)
из примера grefon я наконец полностью понял работу функции

теперь буду её использовать вместо for
Спасибо Улыбка
(Добавление)
может ли код работать неправильно из-за того, что в таблице `archives` нет записей одного из пользователей user_id ?? Не все пользователи имеют записи в этой таблице.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 18:42:07
Post Id



Гость


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


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




Extazy пишет:
может ли код работать неправильно из-за того, что в таблице `archives` нет записей одного из пользователей user_id ?? Не все пользователи имеют записи в этой таблице.


Нет, Вы просто получите пустой результат.
 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 18:57:43
Post Id



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


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


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




я мог конешно запутатся но код можно написать примерно так.
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT `u`.*, `a`.`id` AS `a_id`, SUM(`s`.`cost`) AS `cost` FROM `users` AS `u`, `archives` AS `a`, `stat` AS `s` WHERE `a`.`user_id` = `u`.`id` AND `s`.`id_archive` = `a`.`id`") or die (mysql_error());
  2. echo "<ol>";
  3. while ( $row = mysql_fetch_array($result) ) {        
  4.         $login = $row['user']; // user замените на свой столбик
  5.         $balans = $row['cost'];
  6.        
  7.         echo "<li>".$login."(".$balans.")</li>";        
  8. }
  9. echo "</ol>";


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Extazy
Отправлено: 01 Апреля, 2011 - 23:09:08
Post Id


Посетитель


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


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




OrmaJever, Ваш вариант выводит только 1 логин и сумму для него.

Где ж ошибка то.. очень надо Огорчение
 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 23:29:18
Post Id



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


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


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




попробуйте заменить в условии AND на OR


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Extazy
Отправлено: 01 Апреля, 2011 - 23:31:27
Post Id


Посетитель


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


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




сделал и вообще логины пропали, а число стало каким-то непонятным =///
 
 Top
Extazy
Отправлено: 02 Апреля, 2011 - 12:48:03
Post Id


Посетитель


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


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




больше нет идей?
 
 Top
Extazy
Отправлено: 03 Апреля, 2011 - 12:17:18
Post Id


Посетитель


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


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




очень нужна помощь(
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB