ФорумПрограммированиеPHP для идиотов → Запрос

Запрос

  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 21:47

    Есть в SQL таблица [table][tr][td]id[/td][td]name[/td][td]rating[/td][/tr][/table] В ней допустим 1000 записей. Нужно упорядочить таблицу по колонке rating и вывести на каком месте строка с id = к примеру 251
    SELECT * FROM `table` ORDER BY rating - а дальше как я незнаю (
    Варианты:
    1. Добавить в таблицу еще один столбец, и при каждом обновленнии таблицы, забивать в него места (но это нагрузка большая я так думаю)
    2. А вот тут ваши идеи )
    PS может есть в SQL какаянить функция для этого? Я не встречал )
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 21:55, спустя 8 минут 13 секунд

    Кэп говорит:
    УГ попячся, да создай поле некое сделай ключем алсо поставь же туды AUTO_INCREMENT - и бей воруй убивай УГ с лучемете
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 22:04, спустя 9 минут 11 секунд


    Кэп говорит:
    УГ попячся, да создай поле некое сделай ключем алсо поставь же туды AUTO_INCREMENT - и бей воруй убивай УГ с лучемете

    А по русски?
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 22:08, спустя 3 минуты 44 секунды

    CREATE TABLE `user.rating` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `user_id` INT NOT NULL ,
    `name` TEXT NOT NULL ,
    `rating` INT NOT NULL
    )
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 22:13, спустя 4 минуты 26 секунд


    CREATE TABLE `user.rating` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `user_id` INT NOT NULL ,
    `name` TEXT NOT NULL ,
    `rating` INT NOT NULL
    )

    Ты че думаешь у меня id не автоматически заполняется? ) Мне надо узнать на каком месте по рейтингу строка с каким то там id
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 22:21, спустя 8 минут 10 секунд

    SELECT * FROM `user.ratings` ORDER BY `rating`


    $i = 0; // или 1
    while($row = mysql_a…..

    if($row = .. {}
    $i++;
    Спустя 19 сек.
    какбэ намекает
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2009 г. 23:28, спустя 1 час 7 минут 8 секунд

    в масив результат загони да упорядочивай как хочеш..
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 14 сентября 2009 г. 1:23, спустя 1 час 55 минут 4 секунды


    в масив результат загони да упорядочивай как хочеш..


    Если будет огромная куча записей, то не самый лучший вариант, мне кажется…
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2009 г. 1:39, спустя 16 минут 28 секунд

    кучу запросов к базе тоже не фонтан)
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2009 г. 9:10, спустя 7 часов 30 минут 36 секунд

    Если речь идет о пыхе, то:

    <?php

    //Интересующий нас id
    $id=251;

    //Счетчик
    $i=1;

    //Запрос
    $sql = "SELECT * FROM table ORDER BY rating";
    $result = mysql_query($sql);

    while($rows_count = mysql_fetch_assoc($result))
    {

    //Если встретили интересующий нас id, записываем позицию.
    if ($rows_count['id']==$id){$poz=$i;}
    else{$i=$i+1;}

    }


    //Выводим позицию
    echo'Интересующий нас id на ';
    echo $poz;
    echo' месте';
    ?>
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2009 г. 9:48, спустя 37 минут 40 секунд


    в масив результат загони да упорядочивай как хочеш..


    Вы используете СУБД, которая призвана выбирать/упорядочивать/считать и очень быстро.
    Пользуйтесь СУБД не только как хранилищем, но и как вычислителем.

    Если нужно узнать на каком месте по рейтингу один участник, то запрос примерно так можно написать:

    – посчитать к-во записей, rating которых меньше rating нужного ID
    select count(*)
    from table
    where
    and rating < (select rating from table where id = :id)
    order by rating


    Можно по пробовать вычислить "место" и для всех записей:

    select
    id,
    (select count(*) from table t2 where t2.rating < t1.rating)  mesto
    from
    table t1
    – если добавить предложение WHERE, то будет подсчет для определенной записи.
    where
    t1.id = :id
    Спустя 66 сек.
    Для быстрого выполнения этих запросов нужен индекс на поле rating
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 сентября 2009 г. 9:59, спустя 11 минут 4 секунды

    SELECT FIND_IN_SET(6001, (select GROUP_CONCAT( id SEPARATOR ",")  FROM founds)  )


    это вам старт, дальше сами играйтесь ;)
    Спустя 61 сек.
    AndryG, и твоя логика верна тоже =))
    Сапожник без сапог
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2009 г. 10:02, спустя 3 минуты 12 секунд

    а моя? Я тоже хочу лесных слов от дуда)))
    Спустя 33 сек.
    только не говори пиздец))))ыы
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 сентября 2009 г. 10:03, спустя 51 секунду


    а моя? Я тоже хочу лесных слов от дуда)))
    Спустя 33 сек.
    только не говори пиздец))))ыы
    твой метод - полная хуйня
    Спустя 24 сек.
    особенно когда табличка большая и ищут место так 50000ое … вот тогда точно 502 увидишь
    Сапожник без сапог
  • relictx

    Сообщения: 307 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2009 г. 10:04, спустя 1 минуту 33 секунды

    ушел рыдать))
    Спустя 76 сек.
    Если он пыху юзает, один фих от массива не уйти

Пожалуйста, авторизуйтесь, чтобы написать комментарий!