Requêtes SQL utiles

Je cherche parfois des requêtes SQL qui pourraient me faire gagner du temps et c’est parfois difficile de les trouver rapidement. Je vais donc dans cet article ajouter régulièrement quelques requêtes SQL assez pratiques.

Modifier une partie de texte d’une colonne


UPDATE `ma_table` SET ma_colonne = REPLACE(ma_colonne, 'mon_texte_a_remplacer', 'mon_texte_de_remplacement') WHERE ma_colonne LIKE '%mon_texte_a_remplacer%'

Nombre de résultats d’une requête sans tenir compte du LIMIT


SELECT SQL_CALC_FOUND_ROWS * FROM maTable WHERE maCondition LIMIT 0,10
//puis
SELECT FOUND_ROWS();

Insérer une ligne supplémentaire pour chaque clef distincte


INSERT INTO `ps_category_group` (id_category, id_group) SELECT DISTINCT t1.id_category, 14 FROM `ps_category_group` t1 WHERE NOT EXISTS(SELECT id_category FROM `ps_category_group` t2 WHERE t2.id_category = t1.id_category and t2.id_group = 14)

Ici on rajoute à la table « ps_category_group » une ligne par « id_category » distinct et on fixe la valeur de « id_group » à 14.

Insertion multiple en sql

Sur les forums d’entraide entre Webmaster je vois souvent la même erreur lorsqu’une personne souhaite insérer dans sa base de données plusieurs enregistrements. La plupart du temps voici le type de code que l’on retrouve.



foreach($monTableau AS $tableau) {
mysql_query("INSERT INTO maTable (champ1,champ2,champ3) VALUES ($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])");
}


Même si ce code fonctionne cela suppose qu’une requête sera effectuée pour chaque ligne du tableau « $monTableau ». Ce qui risque de poser problème si vous avez un tableau de grande taille.

L’idéal est plutôt de générer votre requête dans votre boucle puis de ne lancer qu’une seule requête qui se chargera d’insérer tous vos enregistrements en une fois.



$addToQuery="";
foreach($monTableau AS $tableau) {
$addToQuery.=($addToQuery=="")?"($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])":",($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])";
}
$query="INSERT INTO maTable (champ1,champ2,champ3) VALUES ".$addToQuery;
mysql_query($query);


Vider une table liée avec une clé étrangère.

Si vous utilisez les clés étrangères avec mysql vous avez sans doute déjà eu le message suivant lorsque vous vouliez supprimer ou vider une table:

« cannot truncate a table referenced in a foreign key constraint »

 

La solution est toute simple, il suffit de désactiver la vérification des clés étrangères avant de vider ou supprimer votre table, il faudra ensuite la réactiver pour que votre table garde sa logique de départ.

Cela donne:


SET FOREIGN_KEY_CHECKS = 0;
truncate matable;
SET FOREIGN_KEY_CHECKS = 1;

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *