Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Diskuze: Django složitější LEFT JOIN, jak na něj v ORM

Python Python Django složitější LEFT JOIN, jak na něj v ORM American English version English version

Aktivity (1)
Avatar
Croxo
Člen
Avatar
Croxo:15. října 14:23

Ahoj, nějakou dobu se snažím přijít na to, jak níže uvedený SQL dotaz zapsat pomocí ORM modelu.. Nevím si rady jelikož se dotaz týká více než dvou tabulek (se kterými problém nemám ale netuším jak zkombinovat více než jeden LEFT JOIN)

SELECT *, HEX(event_id) as event_id, HEX(backlog_id) as backlog_id, HEX(corr_engine_ctx) as corr_engine_ctx, ki.id as kid, ki.name as kingdom, ca.name as category, ta.subcategory from alarm
             LEFT JOIN ( alarm_taxonomy ta LEFT JOIN alarm_kingdoms ki ON ta.kingdom=ki.id LEFT JOIN alarm_categories ca ON ta.category=ca.id ) ON alarm.plugin_sid=ta.sid AND alarm.corr_engine_ctx=ta.engine_id
             WHERE HEX(backlog_id)

Zkusil jsem: Pro převod binárního typu na hex jsem v modelu přidal funkci

def bin_to_hex(self):
    return binascii.hexlify(self.pk)

Vezme primary key pole backlog_id objektu v binárním typu a vrátí hex.

Vím že je možnost použít přímo SQL dotaz přes cursor, ale to není to co potřebuji.

Chci docílit: Za každý tip budu velmi vděčný, hezký den přeji.

 
Odpovědět 15. října 14:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:16. října 8:06

Mozna to bude uplne mimo, ale proc tam mas uvnitr tabulku s left joinu, kterou pak stejne jen lefjoinujes? To muzes joinovat najednou, ne?
http://www.dpriver.com/…qlformat.htm - typ mysql, vlozit kod, klik na format sql

SELECT *,
       Hex(event_id)        AS event_id,
       Hex(backlog_id)      AS backlog_id,
       Hex(corr_engine_ctx) AS corr_engine_ctx,
       ki.id                AS kid,
       ki.name              AS kingdom,
       ca.name              AS category,
       ta.subcategory
FROM   alarm
       LEFT JOIN ( alarm_taxonomy ta
                   LEFT JOIN alarm_kingdoms ki
                          ON ta.kingdom = ki.id
                   LEFT JOIN alarm_categories ca
                          ON ta.category = ca.id )
              ON alarm.plugin_sid = ta.sid
                 AND alarm.corr_engine_ctx = ta.engine_id
WHERE  Hex(backlog_id)

---
FROM   alarm
       LEFT JOIN alarm_taxonomy ta ON ta.sid = alarm.plugin_sid   AND ta.engine_id = alarm.corr_engine_ctx
       LEFT JOIN alarm_kingdoms ki ON ki.id = ta.kingdom
       LEFT JOIN alarm_categories ca ON ca.id =  ta.category
-- a myslim, ze ty id se zapisuji opacne
 
Nahoru Odpovědět 16. října 8:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.