MySQL: Условно выбирающие следующие и предыдущие строки

Так что я понял это. Проблема заключалась в том, что Runtime.getruntime (). Exec // происходит на локальном компьютере, поэтому вам нужно установить mysqldump на локальный компьютер, а не на сервер.

это когда-нибудь

5
задан moo 3 October 2008 в 23:04
поделиться

4 ответа

Или расширение ответа Jeremy...
В одном запросе

(SELECT * FROM articles WHERE id > ? 
 AND private IS NULL 
 ORDER BY id ASC LIMIT 1) 
UNION 
(SELECT * FROM articles WHERE id < ? 
 AND private IS NULL 
 ORDER BY id DESC LIMIT 1)
9
ответ дан 18 December 2019 в 09:11
поделиться

Вот то, как я сделал бы это:

-- next
SELECT * FROM articles WHERE id > ? AND private IS NULL ORDER BY id ASC LIMIT 1

-- previous
SELECT * FROM articles WHERE id < ? AND private IS NULL ORDER BY id DESC LIMIT 1

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

5
ответ дан 18 December 2019 в 09:11
поделиться

Как насчет вложенного выбора?

SELECT * FROM articles WHERE id IN (
    SELECT id FROM articles WHERE id > ? AND private IS NULL ORDER BY id ASC LIMIT 1)
)
OR id IN (
    SELECT id FROM articles WHERE id < ? AND private IS NULL ORDER BY id DESC LIMIT 1
);
2
ответ дан 18 December 2019 в 09:11
поделиться

В вашем конкретном случае вам сойдут с рук подвыборки и т.д., но если вам нужно что-нибудь более сложное (например: с учетом начального баланса и списка платежей и возвратов, расчета баланса счета в каждый момент времени), возможно, вам захочется написать хранимую процедуру, которая использует SQL REPEAT/WHILE/LOOP пункты и разрешает использование переменных и так далее.

2
ответ дан 18 December 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: