Requête sql dans une fonction php
Bonjour,
j'ai une requête qui recherche les identifiants d'auteurs enregistrés dans ma base de données, en les plaçant dans une chaîne qui débute par array(
Code:
1 2 3 4 5 6 7 8 9
| $resauteur2='array('; // ouvre la chaîne
$auteur='SELECT * FROM utilisateurs WHERE auteur>0 ';
$sqlauteur=mysql_query ($auteur) or die ('Erreur SQL !'.$auteur.'<br />'.mysql_error());
while($dataauteur = mysql_fetch_array($sqlauteur))
{
$resauteur2=$resauteur2 . $dataauteur['auteur'].','; // écrit une virgule après chaque item
}
$l=strlen($resauteur2)-1;
$resauteur2=substr($resauteur2,0,$l).')'; // enlève la dernière virgule et ferme la parenthèse |
Si je fais un écho echo $resauteur2; j'obtiens le bon résultat, à savoir : array(23,18,21,65,12,2,104,78,134,136,6,59,5,79,14,216,60,133,51,115)
Je veux maintenant utiliser ce résultat pour rechercher dans ma base de données tous les articles qui ne sont pas attribués à ces auteurs-là:
Code:
1 2 3 4 5 6 7
| $selaut='SELECT * FROM article_auteur WHERE identifiant_article="'.$id_article.'"';
$sqlaut=mysql_query ($selaut) or die ('Erreur SQL !'.$selaut.'<br />'.mysql_error());
while($dataaut = mysql_fetch_array($sqlaut))
{
if(! in_array($dataaut['identifiant_auteur'],$resauteur2))
{echo $resultat;}
} |
ça ne fonctionne pas alors que, si j'écris le même code en remplaçant ma variable $resauteur2 par sa valeur, ça marche :
Code:
1 2 3 4 5 6 7 8 9
|
$resauteur2b=array(23,18,21,65,12,2,104,78,134,136,6,59,5,79,14,216,60,133,51,115);
$selaut='SELECT * FROM article_auteur WHERE identifiant_article="'.$id_article.'"';
$sqlaut=mysql_query ($selaut) or die ('Erreur SQL !'.$selaut.'<br />'.mysql_error());
while($dataaut = mysql_fetch_array($sqlaut))
{
if(! in_array($dataaut['identifiant_auteur'],$resauteur2))
{echo $resultat;}
} |
Je n'arrive pas à comprendre. Je serais heureuse si quelqu'un pouvait m'aider.
Merci à Armel, mais le problème persiste
J'ai testé de différentes manières, parce que la requête fait partie d'une série de requête imbriquées. J'ai délimité la série qui m'intéresse ici. Si j'écris selon le code que vous m'avez envoyé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $liste='SELECT identifiant,titre,lienpage FROM articles2 ORDER BY identifiant DESC';
$sqlliste=mysql_query ($liste) or die ('Erreur SQL !'.$liste.'<br />'.mysql_error());
while($dataart = mysql_fetch_array($sqlliste))
{
$id_article=$dataart['identifiant']; echo $id_article.'<br />';
$titre=$dataart['titre'];
$lienpage=$dataart['lienpage'];
$mots='SELECT * FROM article_mots WHERE identifiant_article="'.$id_article.'"';
$sqlmots=mysql_query ($mots) or die ('Erreur SQL !'.$mots.'<br />'.mysql_error());
$datamot = mysql_fetch_array($sqlmots);
if(empty($datamot))
{
$selaut2='SELECT * FROM article_auteur WHERE identifiant_article="'.$id_article.'"
AND identifiant_auteur NOT IN (SELECT auteur FROM utilisateurs WHERE auteur>0) ';
$sqlaut2=mysql_query ($selaut2) or die ('Erreur SQL !'.$selaut2.'<br />'.mysql_error());
$dataaut2 = mysql_fetch_array($sqlaut2);
if(!empty($dataaut2['identifiant']));
{echo '<li><a href="'.$lienpage.'">'.$titre.' (identifiant: '.$id_article.')</a></li>';}
}
} |
il m'affiche bien tous les articles qui ne sont pas liés à des mots-clé, mais ne trie pas ceux dont l'auteur ne fait pas partie de la liste.
Par ailleurs, désolée, mais je n'ai pas compris comment activer la coloration du code???
Merci d'avance pour votre réponse.
j'essaie de reformuler le problème
j'ai 3 tables: articles2, article_auteur et article_mot
elles sont reliées entre elles par
articles2.identifiant=article_auteur.identifiant_article=article_mot.identifiant_article
je cherche les articles qui
- n'ont pas de correspondance dans la table article_mot
et qui, dans la table article_auteur correspondent à un identifiant_auteur qui ne fait pas partie d'une liste, générée par la requête
Code:
SELECT auteur FROM utilisateurs WHERE auteur>0
je dois avoir une erreur dans l'imbrication des 3 étapes. Je n'arrive pas à trouver, ça fait 3 jours que je suis dessus.
Merci d'avance pour votre aide.