Accueil > > > UN PARSEUR DE SQL (LISTER LES CHAMPS PRESENTS, ET PLUS SI AFFINITES)
UN PARSEUR DE SQL (LISTER LES CHAMPS PRESENTS, ET PLUS SI AFFINITES)
Information sur la source
Description
Bon, je vous presente une classe (qui aurait peut-etre du etre formee comme une fonction, mais bon, j'ai choisi de pouvoir eventuellement laisser une possibilite d'evolution vers un systeme de construction de requettes) Cette classe permet de prendre une requette, de la decouper, d'obtennir ainsi plusieurs tableaux, l'un contient la liste des champs selectionnes, un autre contient la liste des bases, un autre, les conditions, les groupements et les limites... J'ai surement oublie des keywords importants a parser, si vous en trouvez, faites moi signe...
Ca ne parse que les requettes SELECT, simples comme complexes... je n'ai pas voulu gerer les DELETE, DROP, CREATE, INSERT et autres pour le moment, car ce ne sont pas vraiment des requettes que l'on fait construire par un script, ou pour lesquels, la lecture par un script presente de l'interet...... (enfin je crois...)
J'ai fait cette classe pour la requette presentee en bas, elle est complique, et risque de se compliquer encore, et j'avais besoin de faire une liste des champs disons facilement accessibles, alors j'ai code ca...
J'aurais pu faire un parsing recursif pour les sous requettes, je ne l'ai pas fait, c'est selon moi pas obligatoire, donc libre a l'utilisateur de le faire
Source
- try{
- $s=new SqlExpr('
- SELECT
- clients.id, clients.nom, clients.prenom,
- clients.type AS typeclient, /*Homme Femme, Enfant*/
- clients.civilite, /*Madamme Mademoiselle Monsieur*/
- clients.date_de_naissance,
- clients.tranche_age,
- clients.adresse,
- clients.tel,
- clients.actif, /*oui non */
- ville.nom AS nomville,
- ville.code_postal,
- collaborateur.nom AS collaborateur_nom,
- collaborateur.prenom AS collaborateur_prenom,
- collaborateur.pseudo AS collaborateur_pseudo,
- (
- SELECT COUNT(*)
- FROM passage_liste
- WHERE passage_liste.id_client=clients.id
- ) AS nbr_passages,
- (
- SELECT MAX(date_de_passage)
- FROM passage_liste
- WHERE passage_liste.id_client=clients.id
- ) AS derniere_visite,
- (
- SELECT prestations.nom
- FROM passage_liste LEFT JOIN
- (passage_prestation LEFT JOIN prestations
- ON prestations.id=passage_prestation.id_prestation)
- ON passage_prestation.id_passage=passage_liste.id
- WHERE passage_liste.id_client=clients.id
- GROUP BY passage_prestation.id_prestation
- ORDER BY COUNT(*)
- LIMIT 1
- ) AS prestation_best
- FROM
- (clients LEFT JOIN ville ON clients.id_ville=ville.id)
- LEFT JOIN collaborateur ON id_collaborateur_prefere=collaborateur.id
- ');
- echo '<ul>';
- foreach ($s->SELECT as $l)
- echo '<li>'.$s->notableorbase($l[1]).'</li>';
- echo '</ul>';
- }catch (Exception $e){
- echo $e;
- }
try{
$s=new SqlExpr('
SELECT
clients.id, clients.nom, clients.prenom,
clients.type AS typeclient, /*Homme Femme, Enfant*/
clients.civilite, /*Madamme Mademoiselle Monsieur*/
clients.date_de_naissance,
clients.tranche_age,
clients.adresse,
clients.tel,
clients.actif, /*oui non */
ville.nom AS nomville,
ville.code_postal,
collaborateur.nom AS collaborateur_nom,
collaborateur.prenom AS collaborateur_prenom,
collaborateur.pseudo AS collaborateur_pseudo,
(
SELECT COUNT(*)
FROM passage_liste
WHERE passage_liste.id_client=clients.id
) AS nbr_passages,
(
SELECT MAX(date_de_passage)
FROM passage_liste
WHERE passage_liste.id_client=clients.id
) AS derniere_visite,
(
SELECT prestations.nom
FROM passage_liste LEFT JOIN
(passage_prestation LEFT JOIN prestations
ON prestations.id=passage_prestation.id_prestation)
ON passage_prestation.id_passage=passage_liste.id
WHERE passage_liste.id_client=clients.id
GROUP BY passage_prestation.id_prestation
ORDER BY COUNT(*)
LIMIT 1
) AS prestation_best
FROM
(clients LEFT JOIN ville ON clients.id_ville=ville.id)
LEFT JOIN collaborateur ON id_collaborateur_prefere=collaborateur.id
');
echo '<ul>';
foreach ($s->SELECT as $l)
echo '<li>'.$s->notableorbase($l[1]).'</li>';
echo '</ul>';
}catch (Exception $e){
echo $e;
}
Conclusion
c'est une v1. j'ai commence ca vers 13h aujourd'hui, alors il peut rester quelques problemes (surtout que mon utilisation de cette classe reste limitee a une seule requette, alors j'ai teste avec quelques requettes que j'utilise frequement, mais j'ai pas non plus teste avec 400 requettes...)
Historique
- 28 mai 2007 18:54:04 :
- ajout de la gestion des fonctions, et ajout d'une methode qui permet d'obtennir la notation RPN
- 28 mai 2007 18:55:42 :
- euh...
je me suis plante de source lors de la mise a jours d'il y a deux minutes
Sources du même auteur
Sources de la même categorie
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
pb sur mysql avec requete select * from TABLE IN (select ...) [ par malibu23 ]
Salut j ai un pb sur mysql lorsque je fais un requetedu type select CHAMP from TABLE where CHAMP IN ( select CHAMP from TABLE where CHAMP = VARIABLE);
aide hebergeur [ par mohamed6 ]
voila je voudrais savoir ce qu'il faut mettre à la place $dbroot$dbunser$dbpass$url$cheminpour $dbpass je suppose que c'est le mot de passe et le rest
::Problème avec mon compteur [ par kodiask ]
voilà j'ai un compteur qui compte par raport aux ip des visiteur mai le problème est qu'il ne rentre pas les ip dans la BDD je compren pas pourquoi: v
## Où est l'erreur ???? bon diou !! [ par kodiask ]
voila dite moi pourkoi lorsque je met le code la, il n'y a rien ki saffiche ? (c un système de citation aléatoire)mysql_select_db('cit_tbl',$db); $que
sil vou plé où est l'erreur ? [ par kodiask ]
voilà g fai un système de citation au hazard et kanje met le code là il maffiche rien du tout , pourkoi ? merci ....mysql_select_db('cit_tbl',$db); $q
select mysql par date [ par lebobby ]
Bonjour le mondeJe voudrais savoir comment faire un select sur une table qui possede un champ date_recep (de type datetime) dont cette date_recep est
count [ par westsider ]
comment en récupére la valeur d'un count dans mysql??$result = mysql_query("SELECT COUNT (id) AS truc FROM film");while($select = mysql_fetch_array($r
Inversement requete MySql [ par mick0000000001 ]
Voici mon code: $select = mysql_query("SELECT * FROM $blabla ORDER BY id DESC LIMIT 0,6");$result = mysql_num_rows($select);if($result == '0'){echo ""
Pb passage PHP4 -> PHP5 [ par Galmiza ]
Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea
prob de MySQL [ par skaterboss2000 ]
Bonjour @ tous !-Voila ma source :<?phpecho"<font face=verdana size=1>";include('connexion.php');//affichage de la dernière source$select=mys
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|