sql

Drupal: Visualizzare come viene costruita in SQL una query dinamica

drupal

Se stiamo costruendo una query con il nuovo formato "dinamico", e vogliamo tradurre ciò che stiamo facendo nel caro e vecchio SQL per vedere se stiamo effettivamente ottenendo ciò che vogliamo, possiamo fare in 2 modi.

Stampare semplicemente la query come stringa: in questo modo otteniamo la query non parametrizzata. Possiamo ottenere i valori dei parametri con il methodo arguments().

$query = db_select('node', 'n') ...
print((string) $query);
print_r($query->arguments());

Oppure, se abbiamo il devel.module attivo, usare la funzione dpq, che mostra direttamente la query già parametrizzata:

dpq($query);

Mysql: inserire in una colonna un contatore sequenziale di riga

mysql

A volte può servire inserire in una select un contatore sequenziale, in modo che ad ogni record venga generato il numero successivo. Ad esempio per generare degli ID incrementali per una "insert into table". Ecco come:

select @c := @c + 1, ... from ..., (select @c := 0) c

L'esempio effettua un conteggio da 1 a 10, variando i numeri è possibile ovviamente cambiarlo. Ad esempio, per inserire degli utenti drupal:

select @curRow := value from sequences;
insert into users (uid, ...) select @curRow := @curRow + 1 uid, ... from externale_table ...;
delete from sequences; insert into sequences (value) values(@curRow + 1);

Vodafone, analizzare il traffico con SQL

mobile

Questa è la query MySQL da fare per caricare i dati esportati dal sito Vodafone (scegliendo di esportare dei CSV):

load data local infile '#FILE#' into table traffico fields terminated by "," ignore 3 lines (tipo, destinazione, numero, @data, @durata, costo, note, roaming, sim, tecnologia, operatore, volume_altri_op, volume_vlive) set data = str_to_date(@data, '%d/%m/%Y %H:%i:%s'), durata = str_to_date(@durata, '%H:%i:%s');

Si presuppone di chiamare "traffico" la tabella risultate, e che al posto di #FILE# si metta il percorso al file esportato.

 

Dopo aver caricato tutti i dati, queste sono delle prime query per avere delle analisi indicative:

[sql]