Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możliwe jest wykonanie podzapytania za pomocą Sequelize.js?

Nie sądzę, aby jednoznaczna odpowiedź na twoje pytanie była możliwa. Zobacz #1869 :

Aby odpowiedzieć na tytułowe pytanie, Sequelize automatycznie wygeneruje podzapytanie (np. #1719 ), ale nie możesz wykonać niestandardowego podzapytania. Nie mam autorytatywnego odniesienia do negatywu.

Wygląda na to, że Twój stół wygląda mniej więcej tak:

EssayStats
    EssayId
    EssayDate
    WordCount

Wtedy możesz zrobić coś takiego:

return EssayStat.findAll({
    attributes: [
        [sequelize.literal('((SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" DESC LIMIT 1) - (SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" ASC LIMIT 1))'), 'difference'],
        'EssayId'
    ],
    group: ['EssayId']
});

Wszystko, co robi, to uruchamianie dwóch zapytań SELECT, pobranie MAX i MIN z tych zapytań po uporządkowaniu według interesującej Cię zmiennej, a następnie wzięcie różnicy. To da ci to, co cię interesuje:różnicę liczby słów między najnowszą wersją a pierwszą wersją.

Sztuczka polega na tym, aby umieścić instrukcję SELECT w polu atrybutu.

Oczywiście jest cholernie brudny i prawdopodobnie nie aż tak dużo lepszy niż puszka sequelize.query . Ale odpowiada na sedno twojego pytania.

Lepszym rozwiązaniem może być denormalizacja danych i zapisanie „wordCountDelta” bezpośrednio w modelu Esej. Wtedy możesz mieć afterCreate hak aby automatycznie zaktualizować pole. Najprawdopodobniej byłoby to również najszybsze rozwiązanie.

Odpowiedziałem w podobny sposób tu .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skąd mam wiedzieć, czy tabela mysql używa myISAM lub InnoDB Engine?

  2. Jak ustawić limit czasu dla zapytania MySQL za pomocą C API?

  3. MySQL One-to-Many do formatu JSON

  4. Usuń rekord z konsoli — Ruby on Rails

  5. Metoda haszowania hasła Mysql stara vs nowa