MQL è il linguaggio che magnews mette a disposizione per interrogare le entity della piattaforma come i contatti o le comunicazioni, ma anche le tabelle dati create dagli utenti.
Puoi eseguire queste query tramite:
- API REST, ad esempio: Query contacts, Query audiences, Bulk download, MQL select,..
- API Soap, come queryContacts, queryContents, executeSimpleQuery.
O anche nel codice delle comunicazioni Giotto.
Questo linguaggio è un sotto-dialetto del linguaggio SQL standard, con alcune estensioni e alcune limitazioni.
Sintassi di base
La sintassi di base è:
SELECT * FROM <table> WHERE <condition> ORDER BY <fields_list>
Nella maggior parte delle query è necessario specificare l'asterisco (*) anziché i singoli campi della tabella.
//Examples:
SELECT * FROM CONTACTS WHERE status='subscribed'
SELECT * FROM CONTACTS WHERE name = ?
SELECT * FROM CONTACTS WHERE relationfield in (SELECT myvalue FROM MYCUSTOMTABLE WHERE customfield=123)
SELECT name,myfield FROM MYCUSTOMTABLE ORDER BY myorderfield
SELECT name,myfield FROM MYCUSTOMTABLE INNER JOIN OTHERTABLE ON MYCUSTOMTABLE.a=OTHERTABLE.b ORDER BY myorderfield
SELECT * FROM MYCUSTOMTABLE WHERE myfield in (SELECT idcontact from CONTACTS)
SELECT * FROM MYCUSTOMTABLE WHERE myfield = strtonumber('100,66')
SELECT max(myfield) FROM MYCUSTOMTABLE
SELECT * FROM CONTACTS WHERE to_datetime(data_ultima_modifica) >= now(-3600)
SELECT * FROM CONTACTS WHERE to_date(data_iscrizione) >= today(-2)
SELECT * FROM CONTACTS WHERE to_date(data_iscrizione) >= strtodate('10/01/2020')
SELECT * FROM CONTACTS WHERE to_datetime(data_iscrizione) >= strtodatetime('10/01/2020 00:05:00')
SELECT * FROM WEBPAGES WHERE name LIKE 'mypagenamestartswith%'
SELECT * FROM CONTACTS WHERE to_date(data_ultima_modifica) >= to_date(dateadd(data_ultima_modifica, -1, 'day'))
SELECT * FROM CONTACTS WHERE STATS.TOTALCLICKS > 10
SELECT * FROM CONTACTS WHERE STATS.IDCHANNEL = 0 AND STATS.TOTALCLICKS > 10
Funzioni SQL
Nelle query eseguite tramite API, è possibile utilizzare alcune funzioni SQL per elaborare i dati restituiti. Di seguito l’elenco delle funzioni attualmente supportate.
-
count(*)
: come la funzione SQL -
max(columnname)
: come la funzione SQL -
min(columnname)
: come la funzione SQL -
avg(columnname)
: come la funzione SQL -
sum(columnname)
: come la funzione SQL -
lcase(columnname)
: come la funzione SQL (converte la stringa a lowercase) -
ucase(columnname)
: come la funzione SQL (converte la stringa a uppercase) -
to_date(columnname)
: converte un valore di colonna/scala in una data senza orario -
to_datetime(columnname)
: converte un valore di colonna/scala in una data con orario -
to_int (columnname)
: converte un valore (string, decimal...) in un numero intero (integer) -
to_string (columnname)
: converte un valore (date, decimal...) in una stringa (string) -
strtodate(date_literal)
: converte una stringa scritta come data nel formato dell'utente che sta eseguendo la query (utilizzando il fuso orario dell'utente) -
strtodatetime(datetime_literal)
: converte una stringa scritta come data-ora nel formato dell'utente che sta eseguendo la query (utilizzando il fuso orario dell'utente) -
strtonumber (number_literal)
: converte una stringa che contiene caratteri numerici in un numero -
now(offset_in_millis)
: ottiene la data-ora corrente, scaled by an offset in milliseconds -
today(offset_in_day)
: ottiene la data corrente senza orario (a mezzanotte), scaled by an offset in days -
year(columnname)
: come la funzione SQL -
dayofmonth(columnname)
: come la funzione SQL -
weekday(columnname)
: come la funzione SQL -
month(columnname)
: come la funzione SQL -
dateadd(columnname,number_of_days,'day')
: aggiunge un numero di giorni alla data specificata -
fielddescription(fieldname)
: esegue la ricerca di un valore e restituisce la descrizione del valore di un campo elenco di valori
Gestione di date e orari
Quando si scrivono date e orari direttamente nelle query MQL, bisogna fare attenzione a utilizzare sempre le funzioni strtodate/strtodatetime, che garantiscono che il sistema li analizzi utilizzando il tuo formato della data e dell'orario e soprattutto il tuo fuso orario.
Joins e Subqueries
Puoi utilizzare INNER JOIN, RIGHT JOIN e LEFT JOIN quando scrivi le query sulle tabelle custom, ma non sulle tabelle di sistema.
Puoi anche usare l'operatore 'IN' con una sotto-selezione per ottenere lo stesso risultato.
Nelle sotto-selezioni non è possibile utilizzare i dati della query esterna.