Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1706 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Nuage de tag en php/mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nuage de tag en php/mysql

n°1628664
chrisgo_fr
Posté le 22-10-2007 à 15:28:15  profilanswer
 

Bonjour,
J’ai une table qui contient 8 champs tags (tag ,tag2, tag3, …). Et j’aimerai faire une nuage de tags qui reprend l’ensemble des tags de la base.
 
J’ai commencé à utiliser ce code que l’on retrouve un peux partout sur internet :
 
define("MIN_SIZE", 9);
define("MAX_SIZE", 36);
 
 
$result = mysql_db_query($sql_bdd,"SELECT tag, count(*) as number FROM matable GROUP BY tag ORDER BY tag" ) or die(mysql_error());
 
$min = MAX_INT;
$max = -MAX_INT;
 
while ($tag = mysql_fetch_assoc($result)) {
    if ($tag['number'] < $min) $min = $tag['number'];
    if ($tag['number'] > $max) $max = $tag['number'];
    $tags[] = $tag;
}
 
$min_size = MIN_SIZE;
$max_size = MAX_SIZE;
 
foreach ($tags as $tag) {
    $tag['size'] = intval($min_size + (($tag['number'] - $min) * (($max_size - $min_size) / ($max - $min))));
    $tags_extended[] = $tag;
}
 
Et pour l'affichage :
 
<?php foreach ($tags_extended as $tag) : ?>
<a href="recherchemusiqueshdtag2.php5?type=tag2&retag=<?php echo $tag['tag']; ?>" style="font-size:<?php echo $tag['size']; ?>px" title="<?php echo $tag['tag']; ?>"><?php echo $tag['tag']; ?></a>
<?php endforeach; ?>
 
Cela fonctionne bien mais uniquement  pour un champ tag. Et j’aimerais avoir la même chose mais sur plusieurs champs tags(tag,tag2, tag3,...).
J’ai bien tenté de modifier le code en faisant « select tag , tag1 …». Mais après mes connaissances en php ne me permettent pas de faire ce que je veux. J’imagine qu’il faut tout mettre dans un tableau puis de travailler sur le tableau mais j'ai des lacunes à ce niveau.
 
Merci d’avance pour votre aide.
 
Chris

mood
Publicité
Posté le 22-10-2007 à 15:28:15  profilanswer
 

n°1628726
skeye
Posté le 22-10-2007 à 16:29:16  profilanswer
 

Je vois pas ce que tu attends de nous, là.
Si tu as des lacunes, lis la doc et essaye des choses.


---------------
Can't buy what I want because it's free -
n°1628730
chrisgo_fr
Posté le 22-10-2007 à 16:36:23  profilanswer
 

skeye a écrit :

Je vois pas ce que tu attends de nous, là.
Si tu as des lacunes, lis la doc et essaye des choses.


 
En faite, j'attend de vous que vous m'aidiez à modifier ce script pour prendre en compte tous les champs "tag".
 
J'attend votre aide quoi...  :love:  
 
Encore merci d'avance.
 
Chris

n°1628734
skeye
Posté le 22-10-2007 à 16:38:48  profilanswer
 

On ne le fera pas à ta place.
Commence, si tu bloques sur un point précis pose ta question.


---------------
Can't buy what I want because it's free -
n°1628737
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-10-2007 à 16:41:47  profilanswer
 

t'as structure de table est moldave, ça va pas être facile [:spamafote]
 
Tu as une liason n-n entre tes tags et "tatable" ( un tag peut être présent 1 à N fois dans "tatable", un enregistrement de "tatable" contient 1 à N tags), tu devrais avoir trois tables "tags" "tatable" et une table de liaison entre elles.
 
Donc là t'as plus qu'à faire 8 requêtes ( une par tag1...tag8) et te débrouiller pour réunir tout ça ( sachant qu'un résultat de tag1 peut également être dans tag4 par exemple).

n°1628790
chrisgo_fr
Posté le 22-10-2007 à 17:29:13  profilanswer
 

anapajari a écrit :

t'as structure de table est moldave, ça va pas être facile [:spamafote]
 
Tu as une liason n-n entre tes tags et "tatable" ( un tag peut être présent 1 à N fois dans "tatable", un enregistrement de "tatable" contient 1 à N tags), tu devrais avoir trois tables "tags" "tatable" et une table de liaison entre elles.
 
Donc là t'as plus qu'à faire 8 requêtes ( une par tag1...tag8) et te débrouiller pour réunir tout ça ( sachant qu'un résultat de tag1 peut également être dans tag4 par exemple).


 
Tout d'abord merci pour ton aide.
 
Je ne vois pas l'utilité d'une table de liaison ? Pourquoi pas un lien direct "matable" vers la table "tags" qui contiendrait (tag1, tag 2,...).
 
Mais je me pose aussi la question de savoir si une simple requete comme en dessous ne suffirait pas  :
 
$result = mysql_db_query($sql_bdd,"SELECT tag, tag2, tag3, tag4, tag5, tag6, tag7, tag8, count(*) as number FROM matable GROUP BY tag, tag2, tag3, tag4, tag5, tag6, tag7, tag8" ) or die(mysql_error());
 
Mais ma grande question étant comme tu le dit de réunir tout ça. J'ai essayer de mettre tout ca dans un tableau, mais je mis perd.  :pt1cable:  
 
Encore merci.
 
Chris
 
 

n°1628798
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-10-2007 à 17:37:22  profilanswer
 

chrisgo_fr a écrit :

Je ne vois pas l'utilité d'une table de liaison ? Pourquoi pas un lien direct "matable" vers la table "tags" qui contiendrait (tag1, tag 2,...).


http://fr.wikipedia.org/wiki/Base_ [...] ationnelle

chrisgo_fr a écrit :


Mais je me pose aussi la question de savoir si une simple requete comme en dessous ne suffirait pas  :
$result = mysql_db_query($sql_bdd,"SELECT tag, tag2, tag3, tag4, tag5, tag6, tag7, tag8, count(*) as number FROM matable GROUP BY tag, tag2, tag3, tag4, tag5, tag6, tag7, tag8" ) or die(mysql_error());


Non ... et tu n'auras pas la moindre idée du pourquoi avant d'avoir compris comment fonctionnent les fonctions d'aggrégation ( genre count).

chrisgo_fr a écrit :


Mais ma grande question étant comme tu le dit de réunir tout ça. J'ai essayer de mettre tout ca dans un tableau, mais je mis perd.  :pt1cable:


C'est ballot :o

n°1628823
chrisgo_fr
Posté le 22-10-2007 à 18:00:06  profilanswer
 


 
Je suis bien d'accord avec tout ca, mais pourquoi une table liaison ? je m'explique :
 
Je vois bien un lien matable-tabletag mais pas matable-tableliaison-tabletag. On imagine matable à un champs numerointernetag qui pointe sur l'enregistrement de la tabletag qui contient ce numéro interne. Pourquoi mettre une table entre les deux ?
 
Quand tu as une table commande par exemple et une table lignecommande. tu n'a pas de table intermédiare qui lie les deux, elles sont directement lié. Non ?  
 

anapajari a écrit :


Non ... et tu n'auras pas la moindre idée du pourquoi avant d'avoir compris comment fonctionnent les fonctions d'aggrégation ( genre count).


 
Bon d'accord je créé une table tag, voir même une table de liaison, si tu insite. Mais, là n'est pas le problème. Mon problème est de réunir tout sa dans un tableau et de travailler avec. Je sait le faire avec d'autre languages, mais pas en PHP. Je fait un array de $result puis après ?
 
help
 
Merci
 

n°1628830
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-10-2007 à 18:20:20  profilanswer
 

chrisgo_fr a écrit :


Je suis bien d'accord avec tout ca, mais pourquoi une table liaison ? je m'explique :
Je vois bien un lien matable-tabletag mais pas matable-tableliaison-tabletag. On imagine matable à un champs numerointernetag qui pointe sur l'enregistrement de la tabletag qui contient ce numéro interne. Pourquoi mettre une table entre les deux ?
Quand tu as une table commande par exemple et une table lignecommande. tu n'a pas de table intermédiare qui lie les deux, elles sont directement lié. Non ?  


Non :o
Tu as une table commande, une table produit et une table de liaison commande/produit ( que tu peux appeler ligne commande si tu veux).
Le but étant d'éviter d'avoir des informations relatives au produit ( genre son nom) dans ta table "lignecommande".
Ce qui te permet également de faire plus facilement des requêtes sur tes produits.

n°1628848
chrisgo_fr
Posté le 22-10-2007 à 18:54:22  profilanswer
 

anapajari a écrit :


Non :o
Tu as une table commande, une table produit et une table de liaison commande/produit ( que tu peux appeler ligne commande si tu veux).
Le but étant d'éviter d'avoir des informations relatives au produit ( genre son nom) dans ta table "lignecommande".
Ce qui te permet également de faire plus facilement des requêtes sur tes produits.


 
Je suis d'accord, il y a la table produit et la table ligne commande lie les deux.  :)  
 
Je suis près a revoir m'a structure, il n'y a pas de problème.
 
Mais alors comment feriez vous pour réunir tout ca ?
 
Encore merci d'avance.
 

mood
Publicité
Posté le 22-10-2007 à 18:54:22  profilanswer
 

n°1628902
Dj YeLL
$question = $to_be || !$to_be;
Posté le 22-10-2007 à 20:49:37  profilanswer
 

Et il se passe quoi le jour où tu veux autoriser un 9ème tag ?  [:zaib3k]


---------------
Gamertag: CoteBlack YeLL
n°1628935
naceroth
Posté le 22-10-2007 à 21:31:24  profilanswer
 

Dj YeLL a écrit :

Et il se passe quoi le jour où tu veux autoriser un 9ème tag ?  [:zaib3k]


 
Bah on rajoute un champ, comme les 7 premières fois :D

n°1628950
Dj YeLL
$question = $to_be || !$to_be;
Posté le 22-10-2007 à 21:52:19  profilanswer
 

[smiley-arthur-avec-la-main-sur-le-visage]


Message édité par Dj YeLL le 22-10-2007 à 21:52:26

---------------
Gamertag: CoteBlack YeLL
n°1628975
chrisgo_fr
Posté le 22-10-2007 à 22:28:56  profilanswer
 

naceroth a écrit :


 
Bah on rajoute un champ, comme les 7 premières fois :D


 
Je suis tout a fait d'accord avec vous, on ne doit pas faire ce que j'ai fait. j'en rigole d'ailleur car je n'ai pas l'habitude de faire ca.
 
Mais en php je suis nul(et en base de donnée  :) ) et je vous demande votre aide. :??:  
 
En gros, je veux faire un nuage de tag sur une base de recettes culinaires. Des tags comme poivron, périgord, salade... Avec comme condition qu'un enregistrement soit lié à plusieurs tags.
 
Pouvez vous m'aider ?
 
 
 
 
 

n°1628980
Dj YeLL
$question = $to_be || !$to_be;
Posté le 22-10-2007 à 22:45:08  profilanswer
 

1 table "tag", avec un champ id et un champ tag (perso je n'ai pas de champ id, le champ tag faisant office d'index)
1 table avec tes recettes (qui doivent chacune avoir un ID)
1 table de liaison avec un "tag_id" et un "recette_id"

 

Exemple :

 

RECETTES :
1 - Pizza jambon fromage

 

TAGS :
1 - olives
2 - saucisson
3 - lait
4 - jambon
5 - yaourt
6 - fromage

 

TAGS_RECETTES :
1 - 1
1 - 4
1 - 6

 

Edit : Pour ton nuage, tu compte le nombre de fois que chaque tag est utilisé. Plus il l'est, plus il est "important"


Message édité par Dj YeLL le 22-10-2007 à 22:45:39

---------------
Gamertag: CoteBlack YeLL
n°1628982
naceroth
Posté le 22-10-2007 à 22:48:43  profilanswer
 

anapajari l'a déjà fait, tu crées une table tags avec deux champs (un identifiant unique et la valeur du tag) et une table de liaison pour passer d'une structure (moi je suis nul en cuisine :D)
 

Citation :


id     recette     tag1     tag2     ...     tag8
------------------------------------------
1      machin     kkwet    bidule           truc


 
à
 

Citation :


id     tag
-----------
2      kkwet
3      bidule
.
.
.
9     truc


 
Donc, une ligne par tag, ta table de liaison contenant autant de lignes pour une recette qu'il n'y a de tags pour la recette (8 tags pour la recette 1 => 8 lignes) avec l'id de la recette et l'id du tag. Tu n'auras plus à te soucier de savoir si la valeur que tu cherches est dans tag1 ou dans tag9654 :)

n°1628988
chrisgo_fr
Posté le 22-10-2007 à 23:14:34  profilanswer
 


Je n'ai qu'un mot a vous dire : MERCI !!!!!!!!!!!
 
Je vais travailler en suivant vos instructions. Je me permettrai de vous demander votre aide en cas de blocage  :) . Et je mettrai le résultat de mon (votre :-) ) travail pour en faire profiter tout le monde.
 
Encore MERCI !!!!!!!!!
 
Chris

n°1630352
chrisgo_fr
Posté le 24-10-2007 à 16:53:10  profilanswer
 

Bonjour,
 
Bon je suis bloqué  :) .
 
J'ai fait ce que vous m'avez dit et dans un premier temps, cela marche bien.
 
J'ai une page ou j'ai toutes mes recettes affichées dans une liste (sur plusieurs pages) et un nuage de tag correspondant à toutes mes recettes. Lorsque je clique sur un lien du nuage, je diminu la selection pour n'afficher que les recettes qui contiennent ce tag. Jusque là pas de problème.
 
Ensuite j'aimerais afficher un autre nuage qui recherche uniquement les tags de la selection de recette.
 
en gros j'ai un $recette=mysql($sql_bdd,"SELECT.....)
 
Et j'aimerais faire
 
$result = mysql_db_query($sql_bdd,"SELECT tag, count(*) as number FROM MA SELECTION DE $RECETTE GROUP BY tag" ) .
 
Merci d'avance
 

n°1630417
Dj YeLL
$question = $to_be || !$to_be;
Posté le 24-10-2007 à 18:02:40  profilanswer
 

Tu veux sélectionner uniquement la liste des tags présent dans le résultat du 1er filtrage ?
 
Tu récupères la liste des ID des recettes restant après le filtrage, et tu fais un truc du genre (de tête, c'est peut être faux... :D ) :
 

Code :
  1. SELECT tag AS t FROM tags
  2. INNER JOIN recettes_tags AS rt
  3. ON rt.tag_id = t.id AND rt.recette_id IN(liste_des_id)


---------------
Gamertag: CoteBlack YeLL
n°1630433
chrisgo_fr
Posté le 24-10-2007 à 18:37:03  profilanswer
 

Dj YeLL a écrit :

Tu veux sélectionner uniquement la liste des tags présent dans le résultat du 1er filtrage ?
 
Tu récupères la liste des ID des recettes restant après le filtrage, et tu fais un truc du genre (de tête, c'est peut être faux... :D ) :
 

Code :
  1. SELECT tag AS t FROM tags
  2. INNER JOIN recettes_tags AS rt
  3. ON rt.tag_id = t.id AND rt.recette_id IN(liste_des_id)



 
D'abord merci, mais je ne comprend pas tout dans ta requête. Peux m'éclairer ?
 
t et rt c'est quoi ? Et comment tu recupère liste_des_id (c'est $result ?) ?
 
Encore merci d'avance

n°1630436
Dj YeLL
$question = $to_be || !$to_be;
Posté le 24-10-2007 à 18:42:10  profilanswer
 

chrisgo_fr a écrit :

 

D'abord merci, mais je ne comprend pas tout dans ta requête. Peux m'éclairer ?

 

t et rt c'est quoi ? Et comment tu recupère liste_des_id (c'est $result ?) ?

 

Encore merci d'avance

 

t et rt sont des alias.

 

Si tu fais une recherche dans plusieurs tables et que les noms de tables sont super long, tu peux leur donner un alias.

 

Au lieu de ça :

 
Code :
  1. SELECT ma_table_avec_un_nom_super_long.id,
  2. ma_table_avec_un_nom_super_long.name,
  3. ma_table_avec_un_nom_super_long.mon_champ,
  4. mon_autre_table_avec_un_nom_tres_long_aussi.id,
  5. mon_autre_table_avec_un_nom_tres_long_aussi.name,
  6. mon_autre_table_avec_un_nom_tres_long_aussi.monchamp
  7. FROM ma_table_avec_un_nom_super_long,
  8. mon_autre_table_avec_un_nom_tres_long_aussi
 

Tu as ça :

 
Code :
  1. SELECT t1.id, t1.name, t1.mon_champ, t2.id, t2.name, t2.monchamp
  2. FROM ma_table_avec_un_nom_super_long AS t1, mon_autre_table_avec_un_nom_tres_long_aussi AS t2
 

Le "AS" est par ailleurs facultatif, tu peux faire

 
Code :
  1. SELECT t1.id, t1.name, t1.mon_champ, t2.id, t2.name, t2.monchamp
  2. FROM ma_table_avec_un_nom_super_long t1, mon_autre_table_avec_un_nom_tres_long_aussi t2
 

Edit : Pour les ID, tu as dis que tu avais une liste de recettes après filtrage, je suppose que tu as donc leur id non ?


Message édité par Dj YeLL le 24-10-2007 à 18:43:45

---------------
Gamertag: CoteBlack YeLL
n°1630632
anapajari
s/travail/glanding on hfr/gs;
Posté le 25-10-2007 à 09:00:13  profilanswer
 

Dj YeLL a écrit :

Code :
  1. SELECT tag AS t FROM tags
  2. INNER JOIN recettes_tags AS rt
  3. ON rt.tag_id = t.id AND rt.recette_id IN(liste_des_id)



S'trop tout pas bo :o
Si le principe de la requête est bon,  l'utilisation de IN est à bannir dès que possible et surtout l'utilisation de IN dans une condition de jointure c'est à chier [:dawa]
Alors biensur niveau optimisation, la plupart des SGBD doivent s'en sortir correctement mais il est beaucoup plus "clair" de mettre cette condition dans le where:

Code :
  1. SELECT tag AS t FROM tags
  2. INNER JOIN recettes_tags AS rt
  3. ON rt.tag_id = t.id
  4. WHERE  rt.recette_id IN(liste_des_id)
 

Message cité 1 fois
Message édité par anapajari le 25-10-2007 à 09:00:29
n°1630701
Dj YeLL
$question = $to_be || !$to_be;
Posté le 25-10-2007 à 10:12:58  profilanswer
 

anapajari a écrit :


S'trop tout pas bo :o
Si le principe de la requête est bon,  l'utilisation de IN est à bannir dès que possible et surtout l'utilisation de IN dans une condition de jointure c'est à chier [:dawa]
Alors biensur niveau optimisation, la plupart des SGBD doivent s'en sortir correctement mais il est beaucoup plus "clair" de mettre cette condition dans le where:

Code :
  1. SELECT tag AS t FROM tags
  2. INNER JOIN recettes_tags AS rt
  3. ON rt.tag_id = t.id
  4. WHERE  rt.recette_id IN(liste_des_id)
 


 

Ouaip, à dire vrai je vois même pas pourquoi je l'ai foutu dans le ON, alors que j'essaye toujours de foutre le pus possible dans le WHERE ... m'enfin, forum, réponse rapide, pas dans le contexte, juste pour aider toussa :o

 

:D :jap:

 


Edit :
[EXCUSE-A-2-BALLES]
Puis je vais pas faire tout le boulot à sa place non plus, c'était juste pour le mettre sur la voie, j'ai fais exprès pour voir s'il suivait
[/EXCUSE-A-2-BALLES]


Message édité par Dj YeLL le 25-10-2007 à 10:13:59

---------------
Gamertag: CoteBlack YeLL
n°1630761
chrisgo_fr
Posté le 25-10-2007 à 11:10:01  profilanswer
 

Bonjour,
 
Merci pour votre aide.
 
J'ai essayé de faire ce que vous m'avez dit mais cela ne fonctionne pas, je n'ai peux être pas la bonne syntaxe.
 
Voici m'a requête, je n'ai pas pris les alias car vous venez de me les apprendre et pour que ce soit plus clair dans ma tête pour le moment. je les mettrais par la suite.
 
$result = mysql_db_query($sql_bdd,"SELECT tag, FROM tags INNER JOIN recettes ON recettes.noint = tags.recette_noint WHERE recettes.noint IN (SELECT * FROM recettes INNER JOIN tags ON recettes.noint = tags.recette_noint where tags.tag=\"$retag\" )" ) or die(mysql_error());
 
Encore merci pour votre aide.

n°1630774
anapajari
s/travail/glanding on hfr/gs;
Posté le 25-10-2007 à 11:19:37  profilanswer
 

Première chose: pas de virgule entre ton tag et FROM, sinon ça peut pas marcher.
 
Ensuite, est-ce que tu pourrais nous dire ce que tu cherches exactement à obtenir en français?
 
De ce que je comprends de ta tentative de requête, tu cherches tous les tags présents dans toutes les recettes qui contiennent un tag passé en paramètre?
Si c'est bien cela, j'aurais plutot tendance à écrire la requête ainsi

Code :
  1. SELECT
  2. DISTINCT tall.tag
  3. FROM
  4. tags tparam
  5. INNER JOIN recettes ON recettes.noint = tparam.recette_noint
  6. INNER JOIN tags tall ON tall.recette_noint = recettes.noint
  7. WHERE
  8. tparam.tag = '{ton paramètre}'


Il est a noté que cela remontra également le tag que tu passes en paramètre, si tu souhaites éviter cela, change

Code :
  1. INNER JOIN tags tall ON tall.recette_noint = recettes.noint


en

Code :
  1. INNER JOIN tags tall ON tall.recette_noint = recettes.noint AND tall.tag <> tparam.tag

n°1630788
chrisgo_fr
Posté le 25-10-2007 à 11:36:54  profilanswer
 


Super ca marche ! MERCI !!!!!
 
Je vous remercie enormément, vous m'avez appris beaucoup de choses.
 
Pour mon premier post sur un forum, je ne suis pas déçu.
 
 :)  :)  :)  
 
Encore une petit question afin de bien comprendre : tparam et tall cela correspondes à quoi ?
 
Chris

n°1630793
Dj YeLL
$question = $to_be || !$to_be;
Posté le 25-10-2007 à 11:41:52  profilanswer
 

chrisgo_fr a écrit :


Super ca marche ! MERCI !!!!!

 

Je vous remercie enormément, vous m'avez appris beaucoup de choses.

 

Pour mon premier post sur un forum, je ne suis pas déçu.

 

:)  :)  :)

 

Encore une petit question afin de bien comprendre : tparam et tall cela correspondes à quoi ?

 

Chris

 

Les alias mon cher ... les alias :D

 

Edit : Si je peux me permettre ... pourquoi "noint" ?

Message cité 1 fois
Message édité par Dj YeLL le 25-10-2007 à 11:42:19

---------------
Gamertag: CoteBlack YeLL
n°1630807
chrisgo_fr
Posté le 25-10-2007 à 12:03:00  profilanswer
 

Dj YeLL a écrit :


 
Les alias mon cher ... les alias :D
 
Edit : Si je peux me permettre ... pourquoi "noint" ?


 
Pour moi noint = numéro interne (ID)
 
Ce que je comprend pas avec les alias, c'est que je n'ai pas l'impression que l'on note quelque part que t'elle table à tel alias et ca me déroute. Je vais potasser le sujet.
 
Encore merci

n°1630810
Dj YeLL
$question = $to_be || !$to_be;
Posté le 25-10-2007 à 12:05:30  profilanswer
 

chrisgo_fr a écrit :


 
1> Pour moi noint = numéro interne (ID)
 
2> Ce que je comprend pas avec les alias, c'est que je n'ai pas l'impression que l'on note quelque part que t'elle table à tel alias et ca me déroute. Je vais potasser le sujet.

Encore merci


 
1> Pourquoi ne pas l'appeler simplement "id" ? (enfin peu importe ... je trouve juste ça "étrange" noint :D )
 
2> Ben si :
 
INNER JOIN tags tall ON tall.recette_noint = recettes.noint
 
Tu donnes l'alias "tall" à la table "tags"
 
Comme je le disais plus haut, on peut aussi l'écrire :
 
INNER JOIN tags AS tall ON tall.recette_noint = recettes.noint
 
AS signifiant en gros "en tant que"


---------------
Gamertag: CoteBlack YeLL
n°1630814
anapajari
s/travail/glanding on hfr/gs;
Posté le 25-10-2007 à 12:08:07  profilanswer
 

un petit complément sur l'explication de Dj Yell:
Dans le cas de la requête que j'ai filé plus haut tu utilises 2 fois la table tags.
Il est donc nécessaire de leur donner un "petit nom" pour savoir que le sgbd sache sur laquelle il doit aller lire tel champ.

n°1630889
chrisgo_fr
Posté le 25-10-2007 à 14:05:11  profilanswer
 


Juste une dernière chose, pour que je puisse afficher une taille différentes selon la fréquence du tag, il me faut un count(*) as number dans la requête et je n'arrive pas à le placer correctement. Puis-je abusé de votre gentillesse ?

n°1630930
Dj YeLL
$question = $to_be || !$to_be;
Posté le 25-10-2007 à 14:30:13  profilanswer
 

Si je dis pas de connerie, il faut dans ce cas virer le "DISTINCT" sur la sélection des tag, et faire un GROUP BY à la place
 
Un truc du genre :
 

Code :
  1. SELECT
  2.    tall.tag, COUNT(tall.tag)
  3. FROM
  4.    tags tparam
  5. INNER JOIN recettes ON recettes.noint = tparam.recette_noint
  6. INNER JOIN tags tall ON tall.recette_noint = recettes.noint
  7. WHERE
  8.    tparam.tag = '{ton paramètre}'
  9. GROUP BY
  10.    tall.tag


 
Mais si un plus pro que moi pouvait donner sa version :D


---------------
Gamertag: CoteBlack YeLL
n°1630966
chrisgo_fr
Posté le 25-10-2007 à 15:29:33  profilanswer
 

Dj YeLL a écrit :

Si je dis pas de connerie, il faut dans ce cas virer le "DISTINCT" sur la sélection des tag, et faire un GROUP BY à la place
 
Un truc du genre :
 

Code :
  1. SELECT
  2.    tall.tag, COUNT(tall.tag)
  3. FROM
  4.    tags tparam
  5. INNER JOIN recettes ON recettes.noint = tparam.recette_noint
  6. INNER JOIN tags tall ON tall.recette_noint = recettes.noint
  7. WHERE
  8.    tparam.tag = '{ton paramètre}'
  9. GROUP BY
  10.    tall.tag


 
Mais si un plus pro que moi pouvait donner sa version :D


 
 
Merci bien, sa fonctionne bien. J'ai juste rajouté "as number" après COUNT(tall.tag)
 
Encore Merci !!!
 
 
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Nuage de tag en php/mysql

 

Sujets relatifs
Requête MySQL fausse ????[PHP] Importer un fichier XML dans base MYSQL
Localisation des "OUTFILE" générés par MySQL chez FreeI need help ! Requete MySQL sur plusieurs table
Bons bouquins sur PHP, MySQL, XML, AJAX, MERISE ?MySQL Faire un Distinct
[RESOLU] problème d'heure dans requête mysql (heure d'hiver)MySQL - Optimiser le lien entre deux tables
Requete MySQL sur deux tables liées[Resolu]DBI::mysql -> out of memory
Plus de sujets relatifs à : Nuage de tag en php/mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR