Esistono molte funzioni che accettano una query come argomento, come queryContacts, queryContents, executeSimpleQuery, executeUpdate.
Tutte queste funzioni utilizzano il linguaggio MQL per esprimere i comandi di accesso ai dati. Questo linguaggio è un sotto-dialetto del linguaggio SQL standard, con alcune estensioni e alcune limitazioni.
Sintassi di base
La sintassi di base è: SELECT * FROM TABLENAME WHERE CONDITIONS ORDER BY ORDERBYEXPRESSIONS
Alcuni esempi:
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 email, data_eliminazione FROM contacts WHERE status='unsubscribed' AND to_date(data_eliminazione) = strtodate('05/08/2020 19:22: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 supportate
Questo è l'insieme delle funzioni SQL:
- 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.
Tabelle di sistema supportate
Puoi scrivere query sulle tabelle custom e su alcune tabelle di sistema.
È possibile eseguire query MQL solo per leggere i dati dalle tabelle di sistema e per aggiornare i dati è necessario utilizzare le funzioni specifiche (come mergeContact).
Tabelle di sistema supportate:
-
CONTACTS: rappresenta i contatti del database;
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. - GROUPS: rappresenta gli insiemi di contatti, le audience;
-
STATICGROUPMEMBERS: rappresenta i membri di una audience statica;
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. - CONTENTS: rappresenta il database dei contenuti;
- NEWSLETTERS: rappresenta le tue comunicazioni;
- WEBPAGES: rappresenta le tue pagine web;
- SURVEYS: rappresenta i tuoi survey;
-
SURVEYSESSIONS: rappresenta le sessioni di un survey;
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. - WORKFLOWS: rappresenta tutti i workflow in ogni stato (attivo, in pausa o fermo);
- WORKFLOWSESSIONS: rappresenta le sessioni attive del workflow;
-
WORKFLOWSESSIONSFINISHED: rappresenta le sessioni concluse del workflow;
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. -
SIMPLEMESSAGES: rappresenta i messaggi transazionali (inviati o respinti/bounced);
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. -
RECEIVEDMESSAGES: rappresenta i messaggi SMS e EMAIL ricevuti utilizzando il servizio Message Receiver;
Devi avere il permesso di esportare i dati dal database per eseguire query su questa tabella. - RECEIVEDMESSAGESFOLDERS: rappresenta l'insieme di cartelle per i messaggi ricevuti tramite il servizio Message Receiver;
- CONTENTTAGSTATS: statistiche dei contatti relative ai tag di contenuto;
- NEWSLETTERTAGSTATS: statistiche dei contatti relative ai tag di comunicazione;
- CONVERSIONEVENTS: rappresenta gli eventi di conversione.
Tabella di sistema: CONTACTS
La tabella di sistema contacts rappresenta tutti i tuoi contatti.
C'è una colonna per ogni "campo", come 'email', 'status', 'timezone'....
Colonne speciali:
Colonna | Tipo | Descrizione |
---|---|---|
idcontact | Integer | ID del contatto |
iddatabase | Integer | ID del database dei contatti |
status | Integer |
Restituisce un numero che rappresenta lo stato del contatto: '0' per iscritto, '97' per non confermato, '98' per sospeso e '99' per disiscritto. Utilizza il valore come testo nella query così: |
String | Email del contatto | |
stats.idchannel | Integer | ID del canale di inviostats.idchannel=0 for EMAIL stats.idchannel=1 for SMS
|
stats.ipaddress | Datetime | Indirizzo IP della spedizione dell'ultimo messaggio aperto |
stats.totalsent | Integer | Numero di messaggi inviati usando deliveries. Se non è specificato il canale (usando stats.idchannel ) otterrai un record per ogni canale con cui è stato inviato almeno un messaggio |
stats.totalreceived | Integer | Numero di messaggi email ricevuti |
stats.totalhardbounced | Integer | Numero degli hard-bounced dei messaggi email inviati |
stats.totalsoftbounced | Integer | Numero dei soft-bounced dei messaggi email inviati |
stats.totalopened | Integer | Numero dei messaggi email aperti |
stats.totalclicked | Integer | Numero dei messaggi email cliccati |
stats.totalcomplainted | Integer | Number of complained email |
stats.totalforwarded | Integer | Numero dei messaggi email inoltrati |
stats.totalunsubscribed | Integer | Numero dei disiscritti da messaggi email |
stats.totalconverted | Integer | Numero dei messaggi email convertiti |
stats.totalopens | Integer | Numero delle aperture totali |
stats.totalclicks | Integer | Numero dei click totali |
stats.firstsent | Datetime | Timestamp of delivery of the first sent message using deliveries |
stats.firstreceived | Datetime | Timestamp of delivery of the first sent message which has been received using deliveries |
stats.firstopen | Datetime | Timestamp of delivery of the first opened message deliveries |
stats.firstclick | Datetime | Timestamp of delivery of the first clicked message deliveries |
stats.firstforwarded | Datetime | Timestamp of delivery of the first forwarded message deliveries |
stats.firstcomplainted | Datetime | Timestamp of delivery of the first complained message deliveries |
stats.firstunsubscribed | Datetime | Timestamp of delivery of the first unsubscribed message deliveries |
stats.firstconverted | Datetime | Timestamp of delivery of the first converted message deliveries |
stats.lastsent | Datetime | Timestamp of delivery of the last sent message using deliveries |
stats.lastreceived | Datetime | Timestamp of delivery of the last sent message which has been received using deliveries |
stats.lastopen | Datetime | Timestamp of delivery of the last opened message deliveries |
stats.lastopenevent | Datetime | Timestamp of the last event which is considered an open |
stats.lastclick | Datetime | Timestamp of delivery of the last clicked message deliveries |
stats.lastforwarded | Datetime | Timestamp of delivery of the last forwarded message deliveries |
stats.lastcomplainted | Datetime | Timestamp of delivery of the last complained message deliveries |
stats.lastunsubscribed | Datetime | Timestamp of delivery of the last unsubscribed message deliveries |
stats.lastconverted | Datetime | Timestamp of delivery of the last converted message deliveries |
stats.engagementlevel | int | Numeric representation of the engagement level: 10 = Contact not subscribed, 20 = Out of recency, 30 = Never-openers, 40 = Ex-openers, 50 = New, 60 = Opener, 70 = Clicker |
slistsubscription.list_IDLIST.subscriptionstatus | String | Status of explicit subscription for special list IDLIST |
slistsubscription.list_IDLIST.subscriptiondate | Datetime | Timestamp of subscription for special list IDLIST |
slistsubscription.list_IDLIST.unsubcriptiondate | Datetime | Timestamp of unsubscription for special list IDLIST |
slistsubscription.list_IDLIST.subscriptionlastmoddate | Datetime | Timestamp of subscription last modification date for special list IDLIST |
Tabella di sistema: GROUPS
Rappresenta tutte le audience di contatti (dinamiche e statiche).
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idgroup | Integer | ID della audience |
name | String | Nome della audience |
creationdate | Datetime | Data-ora di creazione della audience |
lastmodificationdate | Datetime | Data-ora di ultima modifica della audience |
Tabella di sistema: STATICGROUPMEMBERS
Rappresenta tutti i membri delle audience statiche di contatti.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idgroup | Integer | ID della audience |
idcontact | String | ID del contatto |
Tabella di sistema: CONTENTS
Rappresenta tutti i contenuti.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idcontent | Integer | ID del contenuto |
name | String | Nome del contenuto |
creationdate | Datetime | Data-ora di creazione del contenuto |
lastmodificationdate | Datetime | Data-ora di ultima modifica del contenuto |
taglist | String | Lista dei tag associati al contenuto (solo per la clausola WHERE, non per SELECT) |
template | String | Tipo di contenuto, ad esempio articolo 'article' |
totalclicks | Integer | Conteggio totale dei clic sui messaggi inviati (solo sulle spedizioni, non sui messaggi transazionali) |
Tabella di sistema: NEWSLETTERS
Rappresenta tutte le comunicazioni
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idnewsletter | Integer | ID della comunicazione |
idworkflow | Integer | ID del workflow a cui appartiene la comunicazione (solo per i messaggi di notifica che appartengono a un workflow) |
idcampaign | Integer | ID del journey |
name | String | Nome della comunicazione |
subject | String | Subject della comunicazione (canale email) |
emailfrom | String | Mittente della comunicazione (canale email) |
creationdate | Datetime | Data-ora di creazione della comunicazione |
sentdate | Datetime | Data-ora della prima spedizione definitiva della comunicazione |
sent | Boolean | True means the communication has been sent at least once (using deliveries, not transactional messages) |
draft | Boolean | True means the communication has never been sent (using deliveries, not transactional messages) |
template | Boolean | True means the communication is a transactional communication |
emailchannelenabled | Boolean | True means the communication can be used to send email messages |
smschannelenabled | Boolean | True means the communication can be used to send SMS messages |
faxchannelenabled | Boolean | True means the communication can be used to send fax messages |
status | String | 'Active' or 'deleted' |
designertype | String | 'Titano' or 'giotto' |
Tabella di sistema: WEBPAGES
Rappresenta tutte le pagine web (webpages)
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idwebpage | Integer | ID della webpage |
idwebsite | Integer | ID del website |
name | String | Nome della webpage |
Tabella di sistema: SURVEYS
Rappresenta tutti i survey.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idsurvey | Integer | ID del survey |
name | String | Nome del survey |
status | String | 'Active' o 'deleted' |
creationdate | Datetime | Data-ora di creazione del survey |
lastmodificationdate | Datetime | Data-ora di ultima modifica del survey |
Tabella di sistema: SURVEYSESSIONS
Rappresenta tutte le sessioni del survey.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idsurvey | Integer | ID del survey |
idsurveysession | Integer | ID della sessione del survey (da comporre con idsurvey) |
contact | Integer | ID del contatto |
completed | Boolean | True significa che la sessione è stata contrassegnata come completata ('completed'), false significa che la sessione è attiva e non ancora completata ('completed') |
status | String | 'Completed' significa che la sessione è stata contrassegnata come 'completed', 'active' la sessione è attiva e non ancora completata 'completed', 'deleted' significa che la sessione è stata nascosta/eliminata |
startdate | Datetime | Data-ora dell'inizio della sessione |
lastevent | Datetime | Data-ora dell'ultimo evento della sessione (utile per scaricare dati in modo incrementale) |
ipaddress | String | Indirizzo IP del broswer (in caso di utilizzo di indirizzi dinamici, si tratta del primo indirizzo IP utilizzato nella sessione) |
testsession | Boolean | True significa che la sessione è stata contrassegnata come sessione di 'test'. |
Tabella di sistema: WORKFLOWS
Rappresenta tutti i workflow.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idworkflow | Integer | ID del workflow |
name | String | Nome del workflow |
idcampaign | Integer | Id del journey a cui appartiene il workflow |
creationDate | Datetime | Data di creazione del workflow |
Tabella di sistema: WORKFLOWSESSIONS
Rappresenta tutte le sessioni attive di tutti i workflow.
Colonne:
Colunna | Tipo | Descrizione |
---|---|---|
idworkflowsession | Integer | ID della sessione |
contact | Integer |
ID del contatto |
idworkflow | Integer | ID del workflow |
idstartingnode | Integer | Nodo di partenza |
startdate | Datetime | Data di inizio della sessione |
lastevent | Datetime | Data di ultima modifica della sessione |
testsession | Boolean | True significa che è una sessione di test |
Tabella di sistema: WORKFLOWSESSIONSFINISHED
Rappresenta tutte le sessioni concluse dei workflow esistenti.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idworkflowsession | Integer | ID della sessione |
contact | Integer | ID del contatto |
idworkflow | Integer | ID del workflow |
status | String | Stato della sessione. Valori: positive, neutral, error, negative, other |
idstartingnode | Integer | Nodo di partenza |
startdate | Datetime | Data di inizio della sessione |
lastevent | Datetime | Data di ultima modifica della sessione |
testsession | Boolean | True significa che è una sessione di test |
Tabella di sistema: SIMPLEMESSAGES
Rappresenta tutti i messaggi transazionali che sono stati processati.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idsimplemessage | Integer | ID del messaggio |
idcontact | Integer | ID del contatto |
messagetype | String | Tipo di messaggio ('email','sms',fax') |
sentts | Datetime | Data-ora di invio |
opened | Boolean | True significa che il messaggio è stato aperto dal destinatario |
clicked | Boolean | True significa che il messaggio è stato cliccato dal destinatario |
complainted | Boolean | True significa che il contatto ha segnalato come spam il messaggio |
idmessagetype | Integer | ID del tipo di messaggio |
status | String | Status of sent messages, used only to make a filter (can be 'notsent' or 'error'). It doesn't consider bounced messages). Example: SELECT idsimplemessage from SIMPLEMESSAGES where status = 'notsent' or status='error' |
notsentcause | String | Not sent cause as String for the message. Values: 'unknown', 'blacklisted_recipient', 'cancelled', 'unsubscribed', 'forbidden_from', 'forbidden_replyto', 'maxsize_exceeded', 'phonerecipient_notallowed', 'empty_recipient', 'forbidden_smsfrom', 'forbidden_smsnumericfrom', 'no_credit' |
idbouncecategory | Integer | Bounce category id. Use describeBounceCategories to get the category id mapping |
lastupdatets | Datetime | Timestamp of the last event on the message (such as delivery, bounce receipt, click...) |
externalID | String | The external assigned ID of the message |
idnewsletter | Integer | Id of the transactional communication |
destination | String | Tipo di messaggio ('backendusers' for user messages, 'contacts' for contact messages) |
idwfsession | Integer | Id of the workflow session for which the message was sent |
Tabella di sistema: RECEIVEDMESSAGES
Represents all the received messages
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idreceivedmessage | Integer | Id of the received message |
msgfrom | String | From of the message |
messagetype | String | Tipo di messaggio (può essere 'email' o 'sms') |
msgto | String | Destinatario del messaggio |
msgbody | String | (Processed) body del messaggio |
idfolder | Integer | ID del MESSAGERECEIVEDFOLDER |
msgsubject | String | Subject del messaggio (solo per email) |
msgreplyto | String | Reply-to del messaggio (solo per email) |
creationdate | Datetime | Data e ora di ricezione del messaggio |
lastmodificationdate | Datetime | Data e ora di ultima modifica del messaggio |
status | String | Stato del messaggio (può essere 'active' o 'deleted'), usato solo per le clausole WHERE |
Tabella di sistema: RECEIVEDMESSAGESFOLDERS
Rappresenta tutti i messaggi ricevuti.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idreceivedmessagefolder | Integer | ID della cartella |
name | String | Nome della cartella |
status | String | Stato della cartella (può essere 'active' o 'deleted'), usato solo per le clausole WHERE |
Tabella di sistema: CONTENTTAGSTATS
Contact statistics related with content tags
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idcontact | String | ID del contatto |
tagname | String | Tag name |
lastclick | Datetime | Last click on a content with the specified tag |
lastopen | Datetime | Last open on a content with the specified tag |
totalclicks | int | Number of clicks on a content with the specified tag |
totalopens | int | Number of openings on a content with the specified tag |
Tabella di sistema: NEWSLETTERTAGSTATS
Statistiche dei contatti correlate con i tag di comunicazione.
Columns:
Colonna | Tipo | Descrizione |
---|---|---|
idcontact | String | ID del contatto |
tagname | String | Tag name |
lastclick | Datetime | Last click on a communication with the specified tag |
lastopen | Datetime | Last open on a communication with the specified tag |
totalclicks | int | Number of clicks on a communication with the specified tag |
totalopens | int | Number of opens on a communication with the specified tag |
Tabella di sistema: CONVERSIONEVENTS
Rappresenta tutti gli eventi di conversione.
Colonne:
Colonna | Tipo | Descrizione |
---|---|---|
idcontact | Integer | ID del contatto che ha convertito |
iddelivery | Integer | ID della spedizione, if the conversion occurred from a delivered communication |
idsimplemessage | Integer | ID del messaggio transazionale, if the conversion occurred from a transactional communication or workflow message |
idsurvey | Integer | ID del survey, if the conversion occurred from a landing page |
idgoal | Integer | ID dell'obiettivo di conversione |
goalname | String | Nome dell'obiettivo di conversione |
eventts | Datetime | Data-ora dell'evento |
value | Decimal | Valore della conversione (separatore decimale '.') |