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, SUM()

 PHP.SU

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


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

> Без описания
condpattern
Отправлено: 15 Июля, 2013 - 17:56:56
Post Id


Новичок


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


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




Добрый вечер.
Вывожу из базы MySQL в таблицу:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ("data.php");
  3. $result = mysql_query("SELECT f1,f2,f3,f4,SUM(f3+f4) FROM tablename ORDER BY f1",$db);
  4. $myrow = mysql_fetch_array($result);
  5. do
  6. { ?>
  7.  
  8.  
  9.                <tr>
  10.                   <td>
  11.                      <?PHP echo $myrow['f1']; ?>
  12.                   </td>
  13.                   <td>
  14.                      <?PHP echo $myrow['f2']; ?>
  15.                   </td>
  16.                   <td>
  17.                      <?PHP echo $myrow['SUM(f3+f4)']; ?>
  18.                   </td>
  19.                   <td>
  20.                      <?PHP echo $myrow['f3']; ?>
  21.                   </td>
  22.                   <td>
  23.                      <?PHP echo $myrow['f4']; ?>
  24.                   </td>
  25.                </tr>
  26.  
  27.  
  28. <?PHP
  29. } //выводим их в цикле
  30. while($myrow = mysql_fetch_array($result));
  31.  ?>

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


П.с. если убрать сумму, то все отлично выводится, получается таблица из N строк с верными данными.

(Отредактировано автором: 15 Июля, 2013 - 17:58:24)

 
 Top
esterio
Отправлено: 15 Июля, 2013 - 18:03:19
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




mysql_error

П.С. у Вас запрос не верный
Спойлер (Отобразить)
 
 Top
condpattern
Отправлено: 15 Июля, 2013 - 19:06:37
Post Id


Новичок


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


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




esterio пишет:
mysql_error

П.С. у Вас запрос не верный
Спойлер (Отобразить)


Спасибо, работает.
Подскажите еще:
Пытаюсь получить ранк текущего юзера по f1+f2+f3
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT('$login') AS rank FROM TABLE ORDER BY f1+f2+f3

Если я верно понимаю, он должен получать таблицу с сортировкой по f1+f2+f3 и выдавать положение в ней текущего логина, но он выдает нечто непонятное.
Где я ошибаюсь?
 
 Top
esterio
Отправлено: 15 Июля, 2013 - 19:17:44
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




-

(Отредактировано автором: 15 Июля, 2013 - 19:32:27)

 
 Top
LIME
Отправлено: 15 Июля, 2013 - 19:26:21
Post Id


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


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


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




зачем ORDER для 1 строки результата?condpattern
опиши человечьим языком структуру таблицы и что те надо
 
 Top
esterio
Отправлено: 15 Июля, 2013 - 19:28:25
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




LIME
Может тм и не одна строка
 
 Top
LIME
Отправлено: 15 Июля, 2013 - 19:29:25
Post Id


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


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


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




esterio COUNT без группировки...не 1 строка?....такое бывает?)
 
 Top
esterio
Отправлено: 15 Июля, 2013 - 19:31:57
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




да он синтаксиса не знает, да я также тупанул, забыл дописать GROUP
хотя да, и так запрос теряет смысл. удалил
(Добавление)
condpattern
ждем структуру таблицы

(Отредактировано автором: 15 Июля, 2013 - 19:33:06)

 
 Top
condpattern
Отправлено: 15 Июля, 2013 - 19:45:13
Post Id


Новичок


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


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




В таблице много строк.
Пример:

login f1 f2 f3 f4
-------------------------------- ----
login1 1 1 0 2
login2 1 2 3 0
login3 2 1 1 4

Я хочу получить ранк, к примеру, для login1, если бы таблица сортировалась по убыванию для f1+f2+f3

Т.е. в нашем случае ожидаемый результат для login 1, rank=3

И еще в идеале хотелось бы чтобы сие работало в первом сообщении, т.е.
Я вывожу в таблицу из SQL пользователей т для каждого считается ранг.

Пример:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ("data.php");
  3. $result = mysql_query("SELECT f1,f2,f3,f4,f3+f4 AS sum, COUNT(*) AS rank FROM tablename ORDER BY f1",$db);
  4. $myrow = mysql_fetch_array($result);
  5. do
  6. { ?>
  7.  
  8.  
  9.                <tr>
  10.                   <td>
  11.                      <?PHP echo $myrow['rank']; ?>
  12.                   </td>
  13.                   <td>
  14.                      <?PHP echo $myrow['f1']; ?>
  15.                   </td>
  16.                   <td>
  17.                      <?PHP echo $myrow['f2']; ?>
  18.                   </td>
  19.                   <td>
  20.                      <?PHP echo $myrow['sum']; ?>
  21.                   </td>
  22.                   <td>
  23.                      <?PHP echo $myrow['f3']; ?>
  24.                   </td>
  25.                   <td>
  26.                      <?PHP echo $myrow['f4']; ?>
  27.                   </td>
  28.                </tr>
  29.  
  30.  
  31. <?PHP
  32. } //выводим их в цикле
  33. while($myrow = mysql_fetch_array($result));
  34.  ?>


Но в этом случае выдается только одна строчка.

(Отредактировано автором: 15 Июля, 2013 - 19:47:31)

 
 Top
LIME
Отправлено: 15 Июля, 2013 - 19:48:43
Post Id


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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT login FROM tbl ORDER BY f1+f2+f3 DESC

а ранк проще посчитать в цикле простым счетчиком ++$i

(Отредактировано автором: 15 Июля, 2013 - 19:49:02)

 
 Top
soffrick
Отправлено: 15 Июля, 2013 - 19:48:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


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





яснопонятно


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
LIME
Отправлено: 15 Июля, 2013 - 19:49:51
Post Id


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


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


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





ыгым ...и снова Попов детектед((
 
 Top
condpattern
Отправлено: 15 Июля, 2013 - 19:58:25
Post Id


Новичок


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


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




[quote=LIME][/quote]
Забудем про цикл. Тут я разобрался. Спасибо!
Вопрос, как быть с 1 пользователем
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) AS rank FROM TABLE WHERE login='$login' ORDER BY f1+f2+f3 DESC

Выдает всегда rank=1.
При любых ORDER BY.

(Отредактировано автором: 15 Июля, 2013 - 19:59:19)

 
 Top
LIME
Отправлено: 15 Июля, 2013 - 20:04:32
Post Id


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


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM tbl WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM tbl WHERE login = $login)
тыб почитал немного SQL
 
 Top
condpattern
Отправлено: 15 Июля, 2013 - 20:21:41
Post Id


Новичок


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


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




LIME пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM tbl WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM tbl WHERE login = $login)
тыб почитал немного SQL


Сделал так:

CODE (SQL):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT COUNT(*) FROM table WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM table WHERE login = '$login') ",$db);
  2. $myrow = mysql_fetch_array($result);
  3. ?>
  4.  
  5.  
  6.                <tr class="info">
  7.                   <td>
  8.                      <?php echo $myrow['rank']; ?>
  9.                   </td>


Но почему-то в ответ пустота. Мб ордер куда-нибудь добавить?

Может быть вы знаете, можно ли в MySql добавить столбец значение, в котором автоматом бы считалось как сумма двух или трех других? Это бы убрало все сложности. Пользуюсь PhpMyAdmin.
Спасибо.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB