За последние 24 часа нас посетили 34343 программиста и 1694 робота. Сейчас ищут 693 программиста ...

Подсчет просмотров

Тема в разделе "PHP для новичков", создана пользователем greenzlat, 27 май 2010.

  1. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Есть 2 таблицы.

    Первая:
    Id
    Autor

    Вторая:
    Id
    Id_autor
    Text
    View (просмотры данного текста)

    Мне необходимо вывести список авторов и рядом в скобках подсчитать кол-во просмотров всех строк этого автора.
    То есть нужно сложить данные поля View где одинаковые id_autor и вывести их в столбик:

    Петя (5)
    Вася (8) и т.д.
     
  2. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    SELECT *, Sum(b.view) FROM table1 a, table2 b WHERE (a.id = b.id_autor) GROUP BY b.id_autor

    Вроде как то так...
     
  3. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Сделал так:

    PHP:
    1. <?php $top_autor = mysql_query ("SELECT *, Sum(a.view) FROM text a, autor b WHERE (a.id = b.id_autor) GROUP BY b.id_autor");
    2. while ($top_autor1 = mysql_fetch_array ($top_autor))
    3. {  echo $top_autor1['view']; } ?>
    4.  
    Выдает ошибку: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\www\php\top_ispoln.php on line 7
     
  4. VItalijs

    VItalijs Активный пользователь

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    * откуда? либо a.* либо b.* и mysql_error() мега полезная вещь.
     
  5. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Точно.. упустил.. SELECT b.*
     
  6. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    PHP:
    1. <?php $top_autor = mysql_query ("SELECT a.*, Sum(a.view) FROM text a, autor b WHERE (b.id = a.id_autor) GROUP BY a.id_autor");
    2.  while ($top_autor1 = mysql_fetch_array ($top_autor))
    3.  {  echo $top_autor1['view']; } ?>
    4.  
    Выводит нули вот так: 0000000000000000000000000000000000000000000000
     
  7. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Ну а в таблице то что?
    Вывод то, что в таблице.
     
  8. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Он неправильно как-то считает. Посмотрел по БД у одного автора допустим в одном посте 7 просмотров, в другом посте этого же автора 3 просмотра итого по полю view=10, а у другого только 4 и почему-то у которого 4 стоит выше чем у которо 10. Сортировку сделал так:
    PHP:
    1.  
    2. <?php $top_autor = mysql_query ("SELECT a.*, Sum(a.view) FROM text a, autor b WHERE (b.id = a.id_autor) GROUP BY a.id_autor ORDER BY a.view desc limit 20");?>
     
  9. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    А ты тип view какой?
     
  10. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    view int(9)
     
  11. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Дак ORDER BY a.view DESC - вот и сортировка в обратном порядке. Замени DESC на ASC и будет тебе счастье :)
     
  12. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Неа!! Мне нужно чтоб так выводил:
    Иванов (10)
    Петров (5) и т.д.
    неправильно проходит подсчет сумм чисел поля view определенного автора.
     
  13. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Есть в таблице данные:
    Иванов 8
    Иванов 2
    Петров 6
    Сидоров 3
    Сидоров 1
    ________________
    Результат вывода нужен:
    Иванов 10
    Петров 6
    Сидоров 4
     
  14. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Дак не
    PHP:
    1. echo $top_autor1['view'];
    а
    PHP:
    1. echo $top_autor1['Sum(a.view)'];
     
  15. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А ещё можно использовать алиасы при выборке.
    Например:
    [sql]SELECT LAST_INSERT_ID(), COUNT(*), (2+2)[/sql]
    заменяем на
    [sql]SELECT LAST_INSERT_ID() AS `last`, COUNT(*) AS `total`, (2+2) AS `sum`[/sql]
    Для сравнения:

    Код (Text):
    1. Welcome to the MySQL monitor.  Commands end with ; or \g.
    2. Your MySQL connection id is 447
    3. Server version: 5.1.45-community-log MySQL Community Server (GPL)
    4.  
    5. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    6.  
    7. mysql> SELECT LAST_INSERT_ID(), COUNT(*), (2+2);
    8. +------------------+----------+-------+
    9. | LAST_INSERT_ID() | COUNT(*) | (2+2) |
    10. +------------------+----------+-------+
    11. |                0 |        1 |     4 |
    12. +------------------+----------+-------+
    13. 1 row in set (0.00 sec)
    14.  
    15. mysql> SELECT LAST_INSERT_ID() AS `last`, COUNT(*) AS `total`, (2+2) AS `sum`
    16.     -> ;
    17. +------+-------+-----+
    18. | last | total | sum |
    19. +------+-------+-----+
    20. |    0 |     1 |   4 |
    21. +------+-------+-----+
    22. 1 row in set (0.00 sec)
    23.  
    24. mysql>