phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   MySQL  SQL


Recherche approximative sur un nom[06-01-2002]
Posté par pp11

Pour afficher les noms qui "sonnent" comme votre recherche, SOUNDEX est très utile :

SELECT nom
FROM table_noms
WHERE soundex(nom) LIKE soundex('".$recherche_nom."')

Exemple : $recherche_nom = "Dupont"

Trouve : $row['nom'] = "Dupond"

Effacer les enregistrements vieux de plus d'une demi-heure[09-12-2001]
Posté par Samuel Thery

Je me suis pris la tête avec la doc MySQL, alors autant en faire profiter tout le monde !

le but étant d'effacer toutes les lignes d'une table MySQL qui sont vieilles de plus d'une demi-heure (dans mon cas, la table d'un caddie)

DELETE FROM caddie
WHERE date < DATE_ADD(NOW(),INTERVAL -30 MINUTE);

caddie est le nom de ma table et date le nom du champ date (type DATETIME).

SELECT SUM()[17-11-2001]
Posté par denis

Cette fonction est d'une puissance fabuleuse et évite beaucoup de lignes de codes en PHP et des requêtes à n'en plus finir surtout si la BDD comporte un grand nombre d'entrées. Voici par exemple :

SELECT SUM(qte * prix) AS total FROM ventes WHERE mois='janvier' GROUP BY produit

Ceci permet de connaître la somme des ventes de chaque produit pour le mois de Janvier, et tout ça tient en une ligne. Plus fort encore :

SELECT SUM(qte * prix) AS total, SUM(total * 1.196) AS totalTTC FROM ventes WHERE mois='janvier' GROUP BY produit

Idem que l'exemple précédent mais en plus on extrait le total TTC. Et on peut compliquer cette fonction à l'infini et même effectuer des sommes sur des champs de tables différentes.
La difficulté étant de récupérer les alias qui sont dans les exemples précédents : total et totalTTC.

Ce qui donne le code suivant :

<?$query ="
SELECT SUM(qte * prix) AS total,
SUM(total * 1.196) AS totalTTC
FROM ventes
WHERE mois='janvier'
GROUP BY 'produit'
"
;
$bd_result = mysql_query($query);
$ii=0;
while (
$row = mysql_fetch_array($bd_result))
{
    
$ii++;
    
$total[$ii]= $row['total'];
    
$totalTTC[$ii] = $row['totalTTC'];
}
?>


MySQL et les expressions régulières[15-11-2000]
Posté par Frédéric Bouchery

MySQL sait aussi utiliser les expressions régulières. La requête ci-dessous recherche tous les enregistrements dont l'email comprend 'pierre', 'paul', ou 'jacques'.
SELECT * FROM newsletter WHERE email REGEXP '(pierre|paul|jacques);'


Afficher les résultats d'une requête par ordre alphabétique[12-10-2000]
Posté par Luxien

Pour afficher les résultats d'une requête par ordre alphabétique c'est très
simple (mais que j'ai mis 2 semaines pour trouver, c'est pour cela que je propose
cette astuce) :

$sql = "SELECT * FROM nomtab ORDER BY nomchant ASC LIMIT $debut,$nb";

Nb: le LIMIT est utilisé pour afficher les résultats sur plusieurs pages.

Contourner les requêtes imbriquées[10-05-2000]

MySQL ne proposant pas les requêtes imbriquées (pour les versions < 3.24), voici 2 exemples pour les contourner.

------------------------------------------
SELECT * FROM table1
WHERE id IN (SELECT id FROM table2);
Devient :
SELECT table1.* 
FROM table1,table2
WHERE table1.id=table2.id;

------------------------------------------
SELECT *
FROM table1
WHERE id NOT IN (SELECT id FROM table2);
Devient :
SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
------------------------------------------


Synseo