prb de requette - SQL/NoSQL - Programmation
Marsh Posté le 20-07-2004 à 21:08:45
1) select ID_USER from USERS where PG_PUB <> 'NULL'
C'est pas parce que ton champs PG_PUB n'est pas égal à 'NULL' qu'il contient forcément 'Y'. De plus, ca te ferais mal d'utilise la valeur null plutôt que 'NULL' ?
2) Quand on souhaite de l'aide sur une requête et qu'on veut des réponses, c'est mieu de faire l'effort minimum de ne poster que la/les requête/s qui chie/nt
3) where USERS.PG_PUB != 'NULL'
Comme le 1). De plus, utilise <> ou !=, mais faut choisir, mélanger les syntaxes possibles à tout bout de champs c'est ruiner la possibilité de faire de la maintenance par la suite.
4) select distinct ARTICLE.ID_USER,RAISON,PHOTO,PG_PUB from ARTICLE,USERS
Préfixer avec le nom des tables quand tu fais une jointure, ça ne sert pas qu'à éviter de planter lors de l'exécution de la requête quand des champs sont présents dans plusieurs tables, ça sert aussi à une personne qui ne connaît pas ton modèle des données de comprendre la requête. Après ces 4 remarques un peu sèches, je voulais te filer un coup de main (pour pas passer pour un connard), mais là tu me coupes le souffle, ça me lourde de passer 30 minutes à réinventer ton modèle des données. Je répondrai plus tard si je m'emmerde, dans la soirée.
Marsh Posté le 21-07-2004 à 06:35:45
bonjour
non non ne t'inquiète pas "tu ne passera pas pour un connard" à mes yeux je pense que toutes remarques même un peux séches est bonne à prendre c'est comme ca que l'on avance.
1/ pour ta 1er remarque
'NULL' lors de la creation de la table mysql à mi NULL d'habitude je laisse la champ vide (1er connerie de ma part)
2/ pour ta 2em remarque
j'ai pense qu'il fallais mieux poster le bout de code entier. maintenant je sais qu'il faut mieux poster que la requette qui merde.
3/ pour ta 3em remarque
j'ai pas fais gaffe........
4/ pour ta 4em remarque
aurait il fallu que je joingne la structure des tables utilisées pour la requette?
salutation a+ gilles
Marsh Posté le 21-07-2004 à 20:45:23
4/ oui, ne serait-ce que la liste des champs utilisés par la requête.
Bon, vu que t'as pal mal pris mes remarques, je vais faire un effort ce soir, j'ai complètement zappé de repasser sur le forum hier soir, et vu que personne n'a eu la courtoisie de répondre à ton message, je ne vais pas te laisser dans la merde
Marsh Posté le 21-07-2004 à 21:07:53
Dans un premier temps, ta requête ne renvoie pas du tout ce que tu cherches à faire.
Retourne les "nombre_utilisateur" premiers articles de ta table, sans te soucier si tu as tous tes utilisateurs... et donc des "doublons" pour certains utilisateurs.
Je te conseille de faire ça :
|
Ceci dit, j'ai pour ainsi dire jamais fait de PHP, donc je ne suis dûr de rien niveau syntaxe. Par contre c'est l'algo ça suivre.
Avec un SGBD plus évolué tu aurais pu t'en sortir avec une seule requête contenant une sous-requête, mais là c'est pas possible.
Une autre solution t'aurais permit aussi de tout retourner avec une requête unique et un petit traîtement PHP, mais le caractère aléatoire du tri rends impossible ce type de fonctionnement.
Par conséquent, je ne vois pas d'autre solution que celle-ci, qui est bien minable (si t'as 100 000 utilisateurs, tu vas éxécuter 100 001 requête pour afficher la page, ce qui n'est pas terrible.
Marsh Posté le 21-07-2004 à 21:08:59
PS: l'indentation est pourrie, je me suis contenté de faire des copier/coller de ton code, vu que je ne sais pas écrire une ligne de PHP
Marsh Posté le 23-07-2004 à 06:08:06
bonjour
excuse du retard....
merci pour ta reponse, je testesterais les modifs se week end, pour l'indendation a due merdé suite à mon copie colle, elle est plus clean sur l'original
merci je te tiens au courant des modifs
gilles
Marsh Posté le 19-07-2004 à 16:01:36
bonjour
je voudrais afficher toute les personnes qui ont le champ PG_PUB à 'Y' et prendre 1 article par les 9 disponibles
la requette tourne à 90% sauf quelle me selectionne des fois plusieurs articles de la meme personne
ou je me suis trompé
<table border="0" summary="">
<tr>
<td align="center" colspan="2"> </td>
</tr>
<?
session_destroy();
$query="select ID_USER from USERS where PG_PUB <> 'NULL'";
$ok = fm($query);
$nbr = mysql_num_rows($ok);
list($ID_USER)=mysql_fetch_row($ok);
mysql_free_result($ok);
echo"<table border=\"0\" align=\"center\" width=\"500\" cellspacing=\"0\">";
echo"<tr>";
echo"<td align=\"center\" colspan=\"3\" bgcolor='#c1d001'><b>NOS COUPS DE COEUR </b></td>";
echo"</tr>";
$query = "select distinct ARTICLE.ID_USER,RAISON,PHOTO,PG_PUB from ARTICLE,USERS ";
$query .= "where USERS.PG_PUB != 'NULL' ";
$query .= "and ARTICLE.ID_USER=USERS.ID_USER ";
$query .= "ORDER BY RAND() LIMIT $nbr";
$pub = fm($query);
//echo "<br><center>[query : ".$query."]</center>";
$ligne=ceil($nbr/3);
for($i=0;$i<$ligne;$i++)
{
echo"<tr>";
for ($j=0;$j<3;$j++)
{
list($ID_USER,$RAISON,$PHOTO,$PG_PUB)=mysql_fetch_row($pub);
if($PHOTO != "" )
{
echo"<td align=\"center\" class=\"raison\"><br>";
echo"<a href=\"visu.php?action=galerie&expo=aff&page=Y&id_user=$ID_USER&pg_pub=$PG_PUB\">";
echo"<img src=\"tmp/$PHOTO\" border=\"0\" width=\"150\" ></a><br>$RAISON";
echo"</td>";
}
else
{
echo"<td align=\"center\"> </td>";
}
}
$l=0;
$j=0;
echo"</tr>";
}
echo"<tr><td align=\"center\" colspan=\"3\" bgcolor='#c1d001'> </td></tr>";
echo"</table>";
?>
<tr>
<td align="center" colspan="2"><?foot();?></td>
</tr>
</table>