Так что я понял это. Проблема заключалась в том, что Runtime.getruntime (). Exec // происходит на локальном компьютере, поэтому вам нужно установить mysqldump на локальный компьютер, а не на сервер.
это когда-нибудь
Или расширение ответа 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)
Вот то, как я сделал бы это:
-- 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
Я не уверен, как сделать это в одном запросе. Единственная вещь, о которой я могу думать, возможно получает и статью, которую Вы отображаете и следующая статья в одном запросе, но это могло бы слишком сбивать с толку.
Как насчет вложенного выбора?
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
);
В вашем конкретном случае вам сойдут с рук подвыборки и т.д., но если вам нужно что-нибудь более сложное (например: с учетом начального баланса и списка платежей и возвратов, расчета баланса счета в каждый момент времени), возможно, вам захочется написать хранимую процедуру, которая использует SQL REPEAT/WHILE/LOOP пункты и разрешает использование переменных и так далее.