За последние 24 часа нас посетили 200526 программистов и 2075 роботов. Сейчас ищут 1885 программистов ...

Нужна помощь с кодом

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

  1. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Здравствуйте. Помогите, пожалуйста в следующем:

    Есть таблица ".USER_RATING_TABLE." и ее структура:

    [​IMG]

    Нужно сделать рейтинг по сумме rating_value, каждого other_user_id

    Посчитать сумму всех rating_value, могу без проблем... а по отдельности не могу...
     
  2. shurastik

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

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    [sql]
    SELECT `other_user_id`, SUM(`rating_value`) AS `sum`
    FROM `USER_RATING_TABLE`
    GROUP BY `other_user_id`
    [/sql]
     
  3. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Спасибо большое, работает! Теперь есть еще один вопросик...

    поле other_user_id соответствует значению, user_id в таблице USERS TABLE. То есть, реально показать по ID, user_name из таблицы USERS TABLE?


    [​IMG]
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    реально =)

    [sql]
    SELECT
    `rating.other_user_id`,
    SUM(`rating.rating_value`) AS `sum`,
    `users.user_name` AS `name`
    FROM
    `USER_RATING_TABLE` AS `rating`, - это для краткости =)
    `USERS_TABLE` AS `users`
    WHERE `rating.other_user_id` = `users.user_id`
    GROUP BY `other_user_id`[/sql]Вроде так
     
  5. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    DB Error: Bad SQL Query: SELECT `other_user_id`, SUM(`rating_value`) AS `vot_sum`, `user_name` AS `name` FROM 5images_users_rating AS `rating`, 5images_users AS `users` WHERE `other_user_id` = `user_id` GROUP BY `other_user_id`
    Column 'user_id' in where clause is ambiguous
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  7. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    :) Лан все равно спасибо.... Буду мозговать над этим!
     
  8. Hotei

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

    С нами с:
    18 окт 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Украина
    [sql]SELECT `other_user_id`, SUM(`rating_value`) AS `vot_sum`, `user_name` AS `name` FROM 5images_users_rating AS `rating`, 5images_users AS `users` WHERE `rating.other_user_id` = `users.user_id` GROUP BY `other_user_id`[/sql]
    Так-как у Вас дублируются названия столбцов "user_id"
     
  9. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Простите, а где именно дублируются
     
  10. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    PHP:
    1. $sql =  "SELECT `other_user_id`, SUM(`rating_value`) AS `vot_sum`, `user_name` AS `name`
    2.        FROM ".USERS_RATING_TABLE." AS `rating`, ".USERS_TABLE." AS `users`
    3.        WHERE `other_user_id` = `user_id`
    4.        GROUP BY `other_user_id`";
    Запрос прошел... все окей... Только не пойму как теперь первым показать с наибольшей суммой rating_value и далее вниз
     
  11. Hotei

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

    С нами с:
    18 окт 2010
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Украина
    [sql]$sql = "SELECT `other_user_id`, SUM(`rating_value`) AS `vot_sum`, `user_name` AS `name`
    FROM ".USERS_RATING_TABLE." AS `rating`, ".USERS_TABLE." AS `users`
    WHERE `other_user_id` = `user_id`
    ORDER BY `vot_sum` DESC GROUP BY `other_user_id`";[/sql]

    (а дублировались названия столбцов, в обоих таблицах есть столбец "user_id" и MySQL не мог выбрать, какой использовать)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    MrAndrew
    действительно, вы же мой запрос переврали =)
     
  13. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Ну дак я не отрицаю! Спасибо за помощь ;-)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    MrAndrew
    ну так нафик вы это сделали? не обратили внимания на AS и наличие названия таблицы перед полем? вот обратите =) Такой синтаксис специально придумали, чтобы избежать конфликтов с одинаковыми названиями разных полей.
     
  15. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Появился один вопрос... Как сделать нумерацию строк теперь? Есть сл. вид топа:

    [​IMG]

    Все это выводится так:

    PHP:
    1. $most_rated_user = "";
    2.  
    3. $sql =  "SELECT `other_user_id`, SUM(`rating_value`) AS `vot_sum`, `user_name` AS `name`
    4.        FROM ".USERS_RATING_TABLE." AS `rating`, ".USERS_TABLE." AS `users`
    5.        WHERE `other_user_id` = `user_id`
    6.        GROUP BY `other_user_id` ORDER BY `vot_sum` DESC LIMIT 10";
    7.    
    8. $result = $site_db->query($sql);
    9. $sum = (isset($row['vot_sum'])) ? $row['vot_sum'] : 0;
    10.  
    11.  
    12. while ($row = $site_db->fetch_array($result)) {
    13.  
    14. $most_rated_user .= "<tr>";
    15. $most_rated_user .= "<td width=\"180\" align=\"left\">";
    16. $most_rated_user .= '<a href ="'.ROOT_PATH.'search.php?search_user='.$row['name'].'"><b>'.$row['name'].'</b></a>';
    17. $most_rated_user .= "</td>";
    18. $most_rated_user .= "<td width=\"70\" align=\"center\">";
    19. $most_rated_user .= '<span class="smalltext"><b>'.$row['vot_sum'].'</b></span>';
    20. $most_rated_user .= "</td>";
    21. $most_rated_user .= "</tr>";
    22.  
    23. }
    24.  
    25. $site_template->register_vars(array(
    26. "most_rated_user" => $most_rated_user,
    27. ));
    28. unset($most_rated_user);
    Слева от имен пользователей, нужно сделать нумерацию, т.е. 1,2,3,4...n
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ++$i;
    echo $i;
     
  17. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Неа, не разберусь, что куда ставить!!
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    он сказал, что ты умрешь =)
     
  19. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Да, все мы там будем! Так, что куда его пихать? ))
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в цикл в начало. уже б сто раз попробовал
     
  21. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Почему-то так: 102 103 104 105 106 107 108,

    Почему не с единицы?
     
  22. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    перед циклом
    $i=0;
     
  23. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Огромное спасибо за помощь! :)
     
  24. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    появился еще вопрос:

    Код:
    PHP:
    1. $most_viewed_airline .= "";  
    2. $most_viewed_airline .= time() - 60 * 60 * 24 * 1;        
    3.         $sql = "SELECT i.image_airline as airline, SUM(i.image_hits) AS hit_sum
    4.        FROM ".IMAGES_TABLE." i
    5.        WHERE i.image_date >= ".$most_viewed_airline."
    6.        GROUP BY airline ORDER BY hit_sum DESC
    7.        LIMIT 5";
    8.  
    9.  
    10. $result = $site_db->query($sql);
    11. $i=0;
    12. $sum = (isset($row['hit_sum'])) ? $row['hit_sum'] : 0;
    13.    
    14.    while ($row = $site_db->fetch_array($result)) {
    Дает сл. результат:

    [​IMG]

    Вопрос в том, как убрать выделенные желтым цветом цифры, и почему они выводятся вообще?