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
Форумы портала PHP.SU :: Версия для печати :: Вывод из SQL, SUM()
Форумы портала PHP.SU » » Вопросы новичков » Вывод из SQL, SUM()

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

1. condpattern - 15 Июля, 2013 - 17:56:56 - перейти к сообщению
Добрый вечер.
Вывожу из базы 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 строк с верными данными.
2. esterio - 15 Июля, 2013 - 18:03:19 - перейти к сообщению
mysql_error

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

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


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

Если я верно понимаю, он должен получать таблицу с сортировкой по f1+f2+f3 и выдавать положение в ней текущего логина, но он выдает нечто непонятное.
Где я ошибаюсь?
4. esterio - 15 Июля, 2013 - 19:17:44 - перейти к сообщению
-
5. LIME - 15 Июля, 2013 - 19:26:21 - перейти к сообщению
зачем ORDER для 1 строки результата?condpattern
опиши человечьим языком структуру таблицы и что те надо
6. esterio - 15 Июля, 2013 - 19:28:25 - перейти к сообщению
LIME
Может тм и не одна строка
7. LIME - 15 Июля, 2013 - 19:29:25 - перейти к сообщению
esterio COUNT без группировки...не 1 строка?....такое бывает?)
8. esterio - 15 Июля, 2013 - 19:31:57 - перейти к сообщению
да он синтаксиса не знает, да я также тупанул, забыл дописать GROUP
хотя да, и так запрос теряет смысл. удалил
(Добавление)
condpattern
ждем структуру таблицы
9. condpattern - 15 Июля, 2013 - 19:45:13 - перейти к сообщению
В таблице много строк.
Пример:

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.  ?>


Но в этом случае выдается только одна строчка.
10. LIME - 15 Июля, 2013 - 19:48:43 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT login FROM tbl ORDER BY f1+f2+f3 DESC

а ранк проще посчитать в цикле простым счетчиком ++$i
11. soffrick - 15 Июля, 2013 - 19:48:56 - перейти к сообщению

яснопонятно
12. LIME - 15 Июля, 2013 - 19:49:51 - перейти к сообщению

ыгым ...и снова Попов детектед((
13. condpattern - 15 Июля, 2013 - 19:58:25 - перейти к сообщению
[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.
14. LIME - 15 Июля, 2013 - 20:04:32 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM tbl WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM tbl WHERE login = $login)
тыб почитал немного SQL
15. condpattern - 15 Июля, 2013 - 20:21:41 - перейти к сообщению
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.
Спасибо.

 

Powered by ExBB FM 1.0 RC1