#javascript #mysql #node.js #knex.js
#javascript #mysql #node.js #knex.js
Вопрос:
У меня есть этот оператор MySQL ниже, который работает так, как задумано. Чувствую себя прекрасно по этому поводу … но…
Я пытаюсь понять, как получить это в knex.js конструктор запросов. В knex.js документы, которые я видел. Я смог суммировать только один столбец с knex.js . The knex.js похоже, это не относится к этому вопросу. Идея в том, что есть положительные и отрицательные отзывы о том, что я создаю. Я хочу знать голоса для каждой категории, а затем общую сумму (up down = total). Я пытаюсь избежать разбиения этого на разные запросы. Я пока не нашел ни одного хорошего примера.
Кто-нибудь может помочь? Спасибо.
use iconwebsite;
SELECT
i.icon_description,
SUM(IF(v.vote_score > 0, v.vote_score, 0)) AS up,
SUM(IF(v.vote_score < 0, v.vote_score, 0)) AS down,
SUM(IF(v.vote_score, v.vote_score, 0)) AS total
FROM
icon i
INNER JOIN
vote v ON i.icon_id = v.icon_id
GROUP BY i.icon_description;
Комментарии:
1. Я не понимаю смысла третьего IF (а в MySQL первые два являются избыточными)
2. Предположительно, у вас уже есть подключение к вашей базе данных в другом месте вашего кода, поэтому я бы предположил, что «использовать iconwebsite» тоже излишне, но если вам нужно указать db в запросе, просто добавьте в таблицы префикс «iconwebsite».
Ответ №1:
Вы можете использовать необработанный SQL с knex подобным образом с вашим запросом:
knex.select(knex.raw(`
use iconwebsite;
SELECT
i.icon_description,
SUM(IF(v.vote_score > 0, v.vote_score, 0)) AS up,
SUM(IF(v.vote_score < 0, v.vote_score, 0)) AS down,
SUM(IF(v.vote_score, v.vote_score, 0)) AS total
FROM
icon i
INNER JOIN
vote v ON i.icon_id = v.icon_id
GROUP BY i.icon_description;
`))
Комментарии:
1. Спасибо за быстрый ответ. Я смотрю на то, что вы присылаете мне на knex.js … все еще не понимаю. Как бы это выглядело с суммой, если учесть контекст, который я предоставил?
2. Если можете, придерживайтесь необработанного SQL, это так освобождает 🙂
3. Я также озадачен тем, как это помогает
4. Я обновил ответ, чтобы показать, как он используется в случае topicstarter. @paul-w, это то, что ты искал?
5. Да, я понял. Я нашел это после публикации вопроса и собрал что-то, что сработало. github.com/knex/knex/issues/1606