- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Интересует, можно ли решить задачу средствами SQL-запроса или средствами СУБД.
База данных PostgreSQL.
Пусть таблица состоит из 3 столбцов: id, title, created.
Нужно выбрать записи:
1) отсортировав их по title;
2) взять только те , которые после сортировки окажутся после (ниже) записи с id = 17;
3) взять только 25 записей.
Решение в лоб: выбираем все записи, сортировку организуем в СУБД, а хитрое отсечение с учётом id=17 уже на PHP. При этом из СУБД в PHP может свалится неопределённо большое количество трафика. Хочется этого избежать и отсечь лишнее в самой СУБД.
---------- Добавлено 20.01.2017 в 12:19 ----------
Сразу поясню зачем это надо.
Пишу API для админки.
А прежде чем сразу АПИ писать изучить основы SQL вера не позволяет?
Sly32, знаю SQL несколько лет. Составлял собственные SQL-запросы, занимался оптимизацией, умею читать план запроса. Но именно с такой задачей столкнулся впервые и сходу не могу сообразить.
---------- Добавлено 20.01.2017 в 12:44 ----------
Кроме того, раньше я работал с MySQL. Сейчас СУБД — PostgreSQL. Возможно, в ней есть какие-то особенности, упрощающие решение описанной задачи.
Зачем? Закиньте в условие селекта where id > 17
limit 25
для простых селектов, считай что все бд примерно одинаковы.
Цитата:
Зачем? Закиньте в условие селекта where id > 17
smbbws, к сожалению это не работает. Это было первое, что пришло мне в голову.
Представьте, что у вас следующие записи (я опущу поле created):
1 - Ананас
2 - Баран
17 - Обезьяна
Отсортировать нужно по названию в обратном порядке.
Если вы напишите
SELECT * FROM table WHERE id > 17 ORDER BY title DESC;
, то не получите ни одной записи.
В то же время, отсортированный список выглядит так:
17 - Обезьяна
2 - Баран
1 - Ананас
А значит, в итоговую выборку должны попасть записи
2 - Баран
1 - Ананас
т.к. они идут ниже (после) записи «17 - Обезьяна».
А если что-то вроде
?http://sqlfiddle.com/#!15/0408e5/2
Если я конечно правильно понял. А если нет, то заполните sqlfiddle и скажите, что должно попасть в выборку, а что не должно.
danforth, да ему не надо id>17. ТС просто использует этот элемент для отсечки. Ему надо, чтобы выбрались имена, расположенные по алфавиту до имени, у которого id=17.
Маркус, А в чем проблема?
Первым коротким запросом получаете title строки с id=17:
Например, получаете: обезьяна.
А вторым запросом получаете выборку:
проверил, работает(mysql). думаю для постгресса тоже подойдет.