За последние 24 часа нас посетил 16801 программист и 1301 робот. Сейчас ищут 1626 программистов ...

Использование LIMIT

Тема в разделе "MySQL", создана пользователем Rus, 19 дек 2006.

  1. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    Добрый день!
    Хочу ограничить вывод текстовых блоков в новостной колонке, для этого решил использовать limit, т.е.:
    select .... from news order by ... desc limit 10
    Так вот простой ламерский вопрос как получить следующую "порцию" 10 новостей? :)
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    ИТД (первая десятка это от какого начинать отсчёт, а вторая это сколько записей выбрать)
     
  3. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    Vladson благодарю
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ты потерял 17 минут на проблему (разница между 1-м и 2-м сообщением), а между тем глянуть в мануал заняло бы максимум 2-3 минуты...

    В следующий раз подумай дважды, а у тебя настолько много свободного времени что можно его так просто выкидывать в никуда ? :)
     
  5. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    Vladson
    Еще один ламерский вопрос, ответ на который думаю в мануале не найду, как мне перемещаться по "порциям" новостей используя гиперссылки?
    Использовать <form action> и таким образом передавать переменные для запроса? или есть альтернатива?
     
  6. Lazarius

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

    С нами с:
    27 окт 2006
    Сообщения:
    37
    Симпатии:
    0
    Адрес:
    г. Москва
    набери в яндексе "php вывод по страницам"
    найдешь столько мануалов...
     
  7. NaRuVi

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

    С нами с:
    14 дек 2006
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Москва
    через цикл генерируй ссылки вида news.php?page=номер страницы
     
  8. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    выводить по страницам я слава богу уже научился месяца 3 тому назад, когда впервые открыл книжку по php :)
    просто не хотел URL "засорять". Хотел передавать переменные POSTом. А как это с гиперссылкой связать не наю. Прийдется использовать GET
     
  9. Anonymous

    Anonymous Guest

    Блин! Что за народ пошел все вые... извратиться хочет. URL всю жизнь был предназначен для передачи параметров, и лишать его этого вообще нонсенс!
    Хорошо, вот захочу я дать ссылку на 3-ю страницу другу, как мне быть?
     
  10. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    Горбунов Олег
    хорошо буду использовать GET. Просто опыта ещё маловато и подсказать особо некому. Мне почему-то казалось что много параметров в url это плохой тон. Теперь буду придерживаться другого мнения
     
  11. Anonymous

    Anonymous Guest

    Rus, сугубо имхо, плохой тон — это не то, на что стоит ориентироваться при разработке. Я руководствуюсь обычно здравым смыслом, и удобством пользователя. А если есть сомнения, просто сажусь и на бумажку выписываю плюсы и минусы каждого подхода. Вообще, стоит держать в уме одну простую вещь — различные стандарты разрабатывались людьми для легкого изучения, запоминания и использования другими людьми, поэтому интуитивное, логичное и самое простое решение — как правило еще и самое верное.
     
  12. draak

    draak Guest

    Руки прочь от URL расшифруйте его название и поймете почему его стоит "засорять"
     
  13. draak

    draak Guest

    Вопрос следующий
    Код (Text):
    1. SELECT * FROM my_table WHERE id>10 LIMIT 5
    Однако записей в таблице больше чем 5.
    А возможно ли получить их реальное колличество и использовать при этом LIMIT,
    но при этом не потерять данные при групперовке например
    Код (Text):
    1. (*неправельный) SELECT count(distinct(id)) c, * FROM my_table WHERE id>10 GROUP BY id LIMIT 5
    Задача такая при поиске у меня формируется запрос, но выводится он постранично с использованием «LIMIT $from, $to».
    И для того чтобы узнать сколько реально записей найдено, мне приходится дублировать запрос чтобы выяснить колличество найденных записей. Хочу их узнать из одного запроса, может кто сталкивался.
     
  14. draak

    draak Guest

    Код (Text):
    1. EXPLAIN SELECT * FROM my_table WHERE id>10 LIMIT 5
    в этом случае rows будет доступен, но он будет приблезительным.
     
  15. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    draak можно использовать вложенный подзапрос:
    SELECT id, (SELECT COUNT(id) FROM your_table) from your_table where id > 10 group by id limit 5;
     
  16. Rus

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

    С нами с:
    29 ноя 2006
    Сообщения:
    44
    Симпатии:
    0
    Адрес:
    Шарыпово, Красноярский край
    draak
    извиняюсь недочитал вопрос :)
     
  17. draak

    draak Guest

    Думаю ты как раз все верно прочитал, обязательно попробую, вложенный подзопрос подойдет думаю.
    Только вот запрос станет в 2 раза больше так как WHERE придется дубилировать, надеюсь он это сделает только один раз... хм а может он будет делать этот запрос при каждом чтении, каждый записи из основоного запроса. Можно еще варианты.
     
  18. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    УЖОС..... SQL_CALC_FOUND_ROWS ...

    Код (Text):
    1.  
    2. $result = mysql_query('SELECT SQL_CALC_FOUND_ROWS id FROM table WHERE id > 10 GROUP BY id LIMIT 0, 5', $database);
    3. $total = mysql_result(mysql_query('SELECT FOUND_ROWS()', $database), 0, 0);
    В $result будут твои данные, а в $total - кол-во записей, удовлетворяющее твоему запросу, если бы в нём небыло LIMIT'a, иными словами записей воообще.
     
  19. draak

    draak Guest

    Код (Text):
    1.  
    2. //700 rows with jcda total 2000
    3. $command = "SELECT * FROM table where nick='jcda' LIMIT 5";
    4. $q = mysql_query($command);
    5. $rows = mysql_num_rows($q);
    6. //$rows is 700 with jcda
    Вот мне что нужно, получить количество при таком же условие как если бы не было параметра LIMIT

    -----------------------------
    ИЗВЕНЯЮСЬ, спасибо все работает....
     
  20. draak

    draak Guest

    FOUND_ROWS()
    Возвращает количество строк, которые возвратила бы последняя команда SELECT SQL_CALC_FOUND_ROWS ... при отсутствии ограничения оператором LIMIT.
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
    mysql> SELECT FOUND_ROWS();
    Второй вызов команды SELECT возвратит количество строк, которые возвратила бы первая команда SELECT, если бы она была написана без выражения LIMIT. Отметим, что, хотя при использовании команды SELECT SQL_CALC_FOUND_ROWS ..., MySQL должен пересчитать все строки в наборе результатов, этот способ все равно быстрее, чем без LIMIT, так как не требуется посылать результат клиенту. Функция SQL_CALC_FOUND_ROWS появилась в MySQL 4.0.0.