За последние 24 часа нас посетили 19352 программиста и 1606 роботов. Сейчас ищут 839 программистов ...

Как вычислить позицию элемента в результатах sql запроса

Тема в разделе "MySQL", создана пользователем AlexJ, 21 авг 2009.

  1. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Скажем есть некий запроc select * from staff where какое-то условие order by какое-то условие
    В результах этого запроса есть некий элемент с `nomer`='некое число'.
    Как наиболее ненакладно узнать на каком месте в результатах этого запроса этот элемент.
    Я это делаю каким-то кривым способом, и кажется можно проще, но из-за пробелов в знаниях не уверен как это правильно делать
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    все равно напиши как проверяешь )
     
  3. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Да там по разному может быть в зависимости от ситуации, я вот и хотел узнать есть ли способ вычислить позицию, не опираясь на условия выборки и сортировки.
    Ну скажем так select * from staff where old=0 order by `auction`, `update_date`,`add_date`
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    есть, но сначала покажи хоть что-то
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в БД нет понятия позиции, т.е. таблицы не упорядочены. ты сам задаешь порядок.
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    он это и хочет. но сначала пусть сам. )
     
  7. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Ну скажем вычисляем значения полей где `nomer`=123 скажем в массив $need[]
    Далее при общем запросе select * from staff where old=0 order by `auction`, `update_date`,`add_date`
    вычисляем позицию так select count(*) from staff where `old`=0 and `auction`<=$need['auction'] and `update_date`<=$need['auction'] and `add_date`<=$need['add_date']
    и получаем позицию элемента с `nomer`==123 в результатах исходного запроса
    Но поскольку запросы все бывают разные в зависимости от ситуации, как получить позицию элемента не опираясь на исходные условия выборки и сортировки
    Я ж не в базе позицию вычисляю, а в результатах некоторого запроса
     
  8. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    правда, не уверен, что соседний пользователь не перебьет ту же переменную. можно @N$usid:=...
     
  9. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    давай вернемся к истокам?

    откуда возникла такая задача?
     
  10. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Будьте добры в двух словах поподробнее, не очень смысла понимаю set 'set @N:=0' это что, в двух словах намекните
     
  11. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    пользовательская переменная.
     
  12. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Есть объявления в базе, пользователю нужно найти свое объявление в общем списке, который естественно разбит на страницы, дабы во первых он не искал свое объявление среди тысяч других и узнал на какой странице многостраничног вывода его объявление находится, дабы был стиму воспользоваться платной услугой поднятия объявления
     
  13. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а страницы неизменны или его позиция каждый день меняется?
    а просто узнать конкретную позицию действительно select count(*) .. where $where and orderfield<$cur
     
  14. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    mysql_query('set @N:=0');
    $sql = "select id, @N:=@N+1 a from ....";
    $q = mysql_query($sql);
    Если я правильно понял, при таком раскладе весь список перебирается и каждой записи прислваивается переменная N, соответствующая его порядковому номеру в результате. А это не слишком тяжело, если скажем записей несколько тысяч, точнее говоря точно нет более чеге либо легковесного
     
  15. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    тогда надо было точнее ставить задачу )
     
  16. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Коллеги, мне просто нужно выяснить как это делается наименее ресурсозатратно
     
  17. AlexJ

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

    С нами с:
    13 май 2009
    Сообщения:
    17
    Симпатии:
    0
    Меняется постоянно, ротация идет, ктото устаревает, добавляются новые, я вобщем через каунт это делать и планирова, но решил выяснить, а не делаю ли я это через одно место
     
  18. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    извращаясь - select count(*) from (select id from $ur_sql) tt если совсем сложно отделить отдельный запрос. но это понятно медленнее.

    сначала я думал тебе надо каждой строчке приписать номер.