[RESOLU] Sous-requête et extraction

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Sous-requête et extraction

Re: [RESOLU] Sous-requête et extraction

par weri » 19 sept. 2012, 22:12

Ça marche. Avec ça je devrais me tirer de pas mal de situations.

Re: Sous-requête et extraction

par Mazarini » 19 sept. 2012, 11:41

...
Merci pour le echo mysql_error(); >> très très utile.
Tu as pu voir qu'il manquait une ")" par rapport au "and (" ?

Etape 1 : regarder le message d'erreur de mysql
Etape 2 : regarder le sql utilisé pour voir le problème : erreur dans la génération du sql via php ou sql bien généré comme tu veux mais pas bon
Etape 3 : regarder le php pour générer le bon sql

Re: Sous-requête et extraction

par weri » 19 sept. 2012, 10:43

Yihaaa! J'ai trouvé! En fait je n'avais pas besoin de sous-requête, mais simplement d'une condition de plus :
// CIBLAGE D'UNE ANNEE EN PARTICULIER
        if ($code_annee!=0){
        $chSQL.="AND EXTRACT(YEAR FROM ll.date_mise_en_ligne)='$code_annee'";
        }
Mais je crois que j'ai un peu mieux compris le concept de sous-requête. Hé, quand même, les gars qui ont cogité ça, chapeau bas!

Merci pour le echo mysql_error(); >> très très utile.

Re: Sous-requête et extraction

par Mazarini » 19 sept. 2012, 09:09

Et si tu ajoutais echo mysql_error() après la requete mysql_query('....'), tu aurai une indication plus précise de ton erreur.
Tu peux également afficher le SQL pour nous le montrer.

Re: Sous-requête et extraction

par weri » 19 sept. 2012, 03:53

Bonjour Moogli, merci,

L'erreur que me donne le WHERE est la suivante :

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\scripts_php\rd_recherche_7.php on line 93

Donc d'après ce que je comprends c'est dû à une erreur de syntaxe, et cette erreur disparaît si je supprime cette sous-requête, ou si je n'y ai pas recours :
 // CIBLAGE D'UNE ANNEE EN PARTICULIER > marche pas
        if ($code_annee!=0){
        $chSQL.="AND (
        SELECT ll.date_mise_en_ligne,
        LEFT (ll.date_mise_en_ligne, 4)
        FROM ll)='$code_annee'";
        }
J'ai essayé d'enlever les alias et d'utiliser le nom de table complet au cas où les alias ne seraient pas acceptés dans une sous-requête, mais ce n'est pas ça. J'ai aussi essayé d'exprimer la sous-requête avec différentes syntaxes un peu persos, mais sans résultat...

J'ai aussi enlevé les espaces en trop derrière les paramètres et avant AND.

Re: Sous-requête et extraction

par moogli » 18 sept. 2012, 22:36

une erreur de syntaxe y a pas d'espace entre le premier paramètre du where et les autres 'and'

soit where truc='machin'and bidulle='chose'

J'ajouterais qu'il serait bon de tester le retour de la requête et d'afficher un retour avec la requête elle même pour pouvoir la tester dans un client SQL



@+

Re: Sous-requête et extraction

par Mazarini » 18 sept. 2012, 09:26

Bonjour,
...
WHERE et me donne une erreur...
...
Quelle erreur ?

Sous-requête et extraction

par weri » 17 sept. 2012, 16:50

Bonjour,

Pour la première fois j'ai besoin d'effectuer une sous-requête et en même temps, je dois extraire l'année d'une date. Le code suivant vient après un WHERE et me donne une erreur. Aurais-je un problème dans ma syntaxe?
// CIBLAGE D'UNE ANNEE EN PARTICULIER
        if ($code_annee!=0){
        $chSQL.="AND (
        SELECT ll.date_mise_en_ligne,
        LEFT (ll.date_mise_en_ligne, 4)
        FROM ll)='$code_annee' ";
L'ensemble du code, pour un moteur de recherche, ressemble à ça :
// Chaine SQL - - - - - - - - - - - - - - -
	$chSQL = "SELECT DISTINCT ll.lecon_liste_id,
        c.niveau,
        c.langue_mater,
        c.categorie,
        user.hn,
        ll.date_mise_en_ligne,
        c.titre_cible,
        c.titre_mater,
        ll.description_cible,
        ll.description_mater,
        ll.version,
        c.langue_cible,
        ll.titre_cible,
        ll.titre_mater,
        ll.lesson_code,
        c.type,
        c.collection_id
        FROM dt_lecon_liste AS ll
	INNER JOIN dt_collection AS c
	ON ll.collection_id = c.collection_id
	INNER JOIN user
	ON c.key_id = user.key_id
	INNER JOIN flw_collaboration
        ON ll.collection_id = flw_collaboration.collection_id
	WHERE ll.en_ligne_bool='1'";
	// AUTEUR : prise en compte d'un auteur
	if ($id_auteur!=0){
        $chSQL.="AND flw_collaboration.collaborateur_id ='$id_auteur'
        AND flw_collaboration.en_vigueur='1' ";
        }
        // LANGUE CIBLE
        $chSQL.="AND c.langue_cible='$langue_cible' ";
        // CATEGORIE
        if ($code_categorie!=-1){
        $chSQL.="AND c.categorie='$code_categorie' ";
        }
        // NIVEAU
        if ($code_niveau!=-1){
        $chSQL.="AND c.niveau='$code_niveau' ";
        }
        // MOTS-CLES
       	if ($mots_recherche!=""){
        $chSQL.="AND (MATCH (ll.titre_cible, ll.titre_mater, ll.description_cible, ll.description_mater) AGAINST ('$mots_recherche')
        OR MATCH (c.titre_cible, c.titre_mater, c.description_cible, c.description_mater) AGAINST ('$mots_recherche')) ";
        }
        // CIBLAGE D'UNE ANNEE EN PARTICULIER
        if ($code_annee!=0){
        $chSQL.="AND (
        SELECT ll.date_mise_en_ligne,
        LEFT (ll.date_mise_en_ligne, 4)
        FROM ll)='$code_annee' ";
        }
        // ORDRE DE RENDU
        if ($mots_recherche==""){
        $chSQL.="ORDER BY ll.date_mise_en_ligne DESC ";
        }
        $chSQL.="LIMIT 50";
        mysql_query("SET NAMES 'utf8'");
       	$result = mysql_query($chSQL);