Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Limit - есть ли что после? / 15 сообщений из 15, страница 1 из 1
04.03.2015, 18:12:07
    #38894963
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
limit выводит 10 записей(к примеру)
в самой выборке без limit может быть больше, а может и не быть
если записей всегда больше 10 то можно добавлять строку типа "показана не вся выборка"
как определить что лимит обрезал набор?
...
Рейтинг: 0 / 0
04.03.2015, 18:18:28
    #38894975
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
1) FOUND_ROWS()
2) Делать LIMIT 11 (реально отображать только 10 или 11 - зависит от задачи). Если выбрано 11 записей - выводить уведомление "в выборке более 10 записей".
...
Рейтинг: 0 / 0
04.03.2015, 18:54:01
    #38895025
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
miksoft,
второй вариант по быстродействию выигрывает
вопрос - как можно извернуться, чтоб это было реализовано в 1 запросе ? без FOUND_ROWS() , точнее без SQL_CALC_FOUND_ROWS, который пересчитывает всё.
типа union по условию
...
Рейтинг: 0 / 0
04.03.2015, 18:57:42
    #38895035
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадяmiksoft,
второй вариант по быстродействию выигрывает
вопрос - как можно извернуться, чтоб это было реализовано в 1 запросе ? без FOUND_ROWS() , точнее без SQL_CALC_FOUND_ROWS, который пересчитывает всё.
типа union по условиюНу так второй вариант - и есть в одном запросе.

Есть еще третий вариант - выполнить отдельный запрос с COUNT(*). Но шансов, что он окажется быстрее первых двух практически нет.
...
Рейтинг: 0 / 0
04.03.2015, 19:14:34
    #38895056
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
я об таком
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @a = 0;
      SELECT
  f.Name
FROM (SELECT
    goods.Name,
    @a := @a + 1 AS a
  FROM goods
  LIMIT 11) f 
        UNION
SELECT
  IF(@a > 99999, '---', '') 


99999 - это для проверки...( в таблице заведомо меньше 99999 записей)
при этом выведет пустую строку
если поставить вмето 99999 - 10 то последней строкой выведет ---
как можно избавиться от пустой строки?
...
Рейтинг: 0 / 0
04.03.2015, 19:16:06
    #38895059
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадякак можно избавиться от пустой строки?WHERE или HAVING

И UNION замените на UNION ALL.
...
Рейтинг: 0 / 0
04.03.2015, 19:27:40
    #38895075
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
типа так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET @a = 0;
SELECT
  e.name
FROM (SELECT
    f.name
  FROM (SELECT
      goods.name,
      @a := @a + 1 AS a
    FROM goods
    LIMIT 11) f
  UNION ALL
  SELECT
    IF(@a > 99999, '---', NULL)) AS e
WHERE NOT ISNULL(e.name)


а это не выглядит слишком извращённо?
...
Рейтинг: 0 / 0
04.03.2015, 19:44:37
    #38895089
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадяа это не выглядит слишком извращённо?Чуток есть. Ибо проблему отображения должен решать клиент, а не SQL-запрос.
Но если клиент управлению не поддается, то пойдет.

Хотя можно и проще:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET @a = 0;
SELECT f.name
FROM
  (SELECT goods.name, @a := @a + 1 AS a
    FROM goods
    ORDER BY ...
    LIMIT 11) f
ORDER BY a
LIMIT 10


Правда, не уверен на 100%, не проверял.
Сортировку не забудьте указать, без нее LIMIT - рулетка.
...
Рейтинг: 0 / 0
04.03.2015, 20:00:04
    #38895097
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
авторЧуток есть. Ибо проблему отображения должен решать клиент, а не SQL-запрос.
вот пока и оцениваю, что оптимальнее

авторНо если клиент управлению не поддается, то пойдет.
клиент поддаётся, но если можно одним инструментом - почему не сделать одним :)

авторЧуток есть.
при такой оценке можно использовать :)

в данном случае сортировка побоку, лишь бы быстрее отработало.
если я понял работу limit - просто перестаёт отбор при достижени заданного количества? (это без сортировки) просто по выборке по расположению данных на диске?

авторХотя можно и проще:SET @a = 0;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT f.name
FROM
  (SELECT goods.name, @a := @a + 1 AS a
    FROM goods
    ORDER BY ...
    LIMIT 11) f
ORDER BY a
LIMIT 10


а где тут индикация о наличии данных после 10 строк?
...
Рейтинг: 0 / 0
04.03.2015, 21:34:21
    #38895173
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадяа где тут индикация о наличии данных после 10 строк?А где она тут - 17343849 ?
Как я понял, предполагается потом в переменную @a посмотреть.
...
Рейтинг: 0 / 0
04.03.2015, 21:56:34
    #38895191
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вот это
SET @a = 0;
SELECT
e.name
FROM (SELECT
f.name
FROM (SELECT
goods.name,
@a := @a + 1 AS a
FROM goods
LIMIT 11) f
UNION ALL
SELECT
IF(@a > 99999, '---', NULL)) AS e
WHERE NOT ISNULL(e.name)

если вместо 99999 поставить 10 - то при наличии 11 записей выведется ---, иначе (10 и меньше) null, который отсечётся WHERE NOT ISNULL(e.name)
...
Рейтинг: 0 / 0
04.03.2015, 22:00:05
    #38895196
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
меня смущает такая вложенность запросов, хотя при 11 записях все они , наверно, обработаются в памяти? заметных тормозов не будет?
...
Рейтинг: 0 / 0
04.03.2015, 22:38:21
    #38895212
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадяпри наличии 11 записей выведется ---,где ж оно выведется, если WHERE отсечет?
...
Рейтинг: 0 / 0
04.03.2015, 23:47:00
    #38895273
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
miksoftвадяпри наличии 11 записей выведется ---,где ж оно выведется, если WHERE отсечет?
а ты проверь :)
если @a >10 select после union выведет ---, если @a<=10 выведет null
вот этот null и отсечет where
"---" = "есть ещё записи"
...
Рейтинг: 0 / 0
05.03.2015, 00:17:48
    #38895286
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Limit - есть ли что после?
вадяа ты проверьа, ну да... надо идти спать...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Limit - есть ли что после? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]