Count sur 2 champs ???

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 : Count sur 2 champs ???

par zeus » 16 mars 2008, 10:49

Modération :
kochalski, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

Probleme résolu ...

par kochalski » 16 mars 2008, 09:41

Probleme résolu ...

En fait mon script fonctionnait bien, j'avais oublié de preciser dans ma requette
("SELECT annonces.id,annonces.theme,annonces.rex_count FROM coordonnees,annonces
WHERE annonces.id_membre=coordonnees.id".$_SESSION["rex_count"]."

OR annonces.id_membre=coordonnees.id".$_SESSION["theme"]." 
MERCI DE S ETRE PENCHER SUR MON PROBLEME

Francis

par Cyrano » 15 mars 2008, 13:42

N'oublie pas une chose importante : dans tout projet quel qu'il soit, de la petite page perso jusqu'au progiciel de gestion intégré, la méthodologie est toujours sensiblement la même : d'abord on analyse soigneusement, on construit une base de données cohérente et après seulement on se met à coder :)

Et pour t'aider un petit peu aussi dans la compréhension de cete histoire de clés étrangères, regarde rapidement ceci

par kochalski » 15 mars 2008, 13:35

Ok, je vais essayer de mettre ça en place
merci pour ton aide.
Demain je repost pour te donner mes resultats.

Francis

par Cyrano » 15 mars 2008, 13:25

Bien, on avance :)

Maintenant on sait qu'en fait, le rex est en fin de compte un booléen : c'est soit oui, soit non. Quant au thème, c'est celui correspondant à la ligne appropriée de la table theme

On en revient donc à ce que j'ai expliqué plus tôt : la colonne annonces.theme devrait être theme_id et c'est une clé étrangère dans la table annonces. Quant à la colonne annonces.rex_count, ça devrait être annonce_rex (tout court) de type ENUM('oui','non') avec en valeur par défaut 'non'

Partant de là, essaye de formuler le résultat de ce que tu veux obtenir. Compter sur deux colonnes : Compter quoi et selon quel critères ?

par kochalski » 15 mars 2008, 12:47

Elles sont connue à partir du momment ou le programme a été creer ainsi que pour le rex.
Si le rex n'est pas créé "=0" mais le programme peut etre créé "==1"

Si le rex est créé "=5" et le programme créé "==1" cela doit me donner les 2 resultats.
Si le rex n'est pas créé "=0" et le programme créé "==1" cela doit me donner 1 resultat.
Si le programme' n'est pas créé "=0" donc le rex "==0" cela doit me donner 0 resultat.

par Cyrano » 15 mars 2008, 12:26

Dans "annonces.theme "on trouvera toujours 1
Dans "annonces.rex_count" on trouvera toujours 5
Donc ces deux colonnes en fin de compte ne servent à rien puisque la valeur est de toutes façons connue :-k

par kochalski » 15 mars 2008, 12:18

Oui elle sont differentes
Dans "annonces.theme "on trouvera toujours 1
Dans "annonces.rex_count" on trouvera toujours 5
Ces valeurs c'est ce que l'on trouve dans la table "theme"

par Cyrano » 15 mars 2008, 12:12

Est-ce que la valeur stockée dans la colonne annonces.theme peut être différente de celle stockée dans la colonne annonce.count_rex ? C'est quoi cette valeur : un lien vers la table theme ou un nombre de retours d'expériences ?

par kochalski » 15 mars 2008, 12:08

Quand la personne créé un programme, cela s'affiche dans "annonces.theme"
Ensuite, cette meme personne fait un retour d'experience "REX" concernant le programme qu'elle a créé. Là ça rempli le champ "annonces.rex_count" sur la meme ligne que "annonces.theme"

par Cyrano » 15 mars 2008, 12:01

pour annonces.theme, je l'avais compris, par contre je ne comprends toujours pas à quoi correspond rex_count :-k

par kochalski » 15 mars 2008, 11:59

Le champ "annonces.rex_count" et "annonces.theme" sont reliés à la table "theme"

par Cyrano » 15 mars 2008, 11:11

Si tu n'as pas saisi ce que je t'ai expliqué, c'est que tu l'as lu un peu trop vite.

Ce que tu veux faire est tout à fait possible mais pas de la manière dont tu t'y prends.
De plus, ce passage

Code : Tout sélectionner

count((annonces.theme) OR (annonces.rex_count))
...est probablement faux.
Là, tu as remplacé le "OR" par "AND", c'est tout aussi invalide.

Mais pour faire des requêtes optimisées, il faudrait avoir une base normalisée avec des relations convenablement construites. Essayer d'optimiser des requêtes sur une base mal construite, c'est essayer de jouer du Mozart sur une casserole : faire ça ou pisser dans un violon, ça fera pas une meilleure musique ;)

Donc je suggère de poser le problème à plat : on a deux tables. Les annonces d'une part, et les thèmes d'autre part. Une annonce correspond à un et un seul thème, alors qu'à un thème peuvent correspondre 0 à n annonces. Pour qu'on avance, il faudrait nous expliquer à quoi correspond le "rex_count" par rapport à tout ça, là je n'ai pas saisi de quoi il s'agit. Est-ce qu'il y a un lien avec une troisième table ou quelque chose du genre ?

par kochalski » 15 mars 2008, 10:07

Je ne comprends pas ce que tu me proposes !!!
Car avec le code que j ai mis en place, il me fournit bien le résultat souhaité de mes 2 champs de la table "annonces".
Le seul soucis est que j'arrive à connaitre le résultat et à afficher "annonces.theme" mais pour "annonces.rex_count" il me donne un résultat mais à l'affichage il m'affiche O.
query = "SELECT Id_theme,theme_site,count((annonces.theme) AND (annonces.rex_count)) FROM  theme,annonces WHERE annonces.theme=theme.Id_theme OR annonces.rex_count=theme.Id_theme GROUP BY theme.Id_theme ORDER BY
 theme.theme_site ASC";	
$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
echo "<select name='theme_product'class=Style39>";
echo "<option value=0 select>--- Tous ---</option>";
While ($data = mysql_fetch_array($result))
{								
echo "<option value =".$data[0].">".$data[1]." (".$data[2].")</option>";
}
echo "</select>";
J'ai entendu parler de "HAVING" et "DISTINCT" ???

Francis

par Cyrano » 15 mars 2008, 09:41

Le truc que je vois, c'est un défaut de conception.

Tu as d'une part une table theme et d'autre part une table annonces. Or dans cette dernière, tu as une colonne theme qui devrait être une clé étrangère nommée theme_id et non une colonne ordinaire. De plus, cette clé ne devrait pas être de type ENUM mais TINYINT UNSIGNED. Si tu veux un jour ajouter un thème avec ton système actuel, il te faudra aller modifier les deux tables pour ajouter les valeurs appropriées, ça n'a rien de rationnel.

Je suggère donc de modifier ce point avant d'aller plus loin :-k