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);
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?
[php]
// 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' ";
[/php]
L'ensemble du code, pour un moteur de recherche, ressemble à ça :
[php]
// 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);[/php]