Petite question requete sql en PHP
16 messages
• Page 1 sur 2 • 1, 2
- vin-moi
- WRInaute occasionnel

- Messages: 391
- Inscription: 22 Nov 2004
Petite question requete sql en PHP
Salut
Voilà j'ai une petite question concernant une requete sql en PHP :
J'ai trois tables contenant des textes de différents types, et trois tables contenant les tags de chaque article.
J'essaye de selectionner les 30 tags les plus utilisé pour créer un nuage. Lors qu'il s'agit de selectionner ses 30 tags pour une des trois tables, c'est assez simple.
ca donne par exemple :
$sqlTags = "SELECT tag, count(*) as iterations
FROM actualites_tags
GROUP BY tag ORDER BY iterations DESC
LIMIT 0, 30";
Le soucis, c'est que je souhaite également faire la même chose, mais sur les trois tables en même temps, est-ce faisable ?
J'ai essayé en faisant une jointure mais evidemment ce n'est pas du tout le résultat attendu :
$sqlTags = "SELECT a.tag, b.tag, c.tag, count(*) as interations
FROM dossiers_tags a, actualites_tags b, fichprat_tags c
GROUP BY a.tag, b.tag, c.tag ORDER BY interations DESC
LIMIT 0, 30";
En fait, ca serait de faire en sorte que les tables soient "collées" et qu'il fasse le tri parmi les trois tables en même temps !
Vous avez une piste ?
merci d'avance!
Voilà j'ai une petite question concernant une requete sql en PHP :
J'ai trois tables contenant des textes de différents types, et trois tables contenant les tags de chaque article.
J'essaye de selectionner les 30 tags les plus utilisé pour créer un nuage. Lors qu'il s'agit de selectionner ses 30 tags pour une des trois tables, c'est assez simple.
ca donne par exemple :
$sqlTags = "SELECT tag, count(*) as iterations
FROM actualites_tags
GROUP BY tag ORDER BY iterations DESC
LIMIT 0, 30";
Le soucis, c'est que je souhaite également faire la même chose, mais sur les trois tables en même temps, est-ce faisable ?
J'ai essayé en faisant une jointure mais evidemment ce n'est pas du tout le résultat attendu :
$sqlTags = "SELECT a.tag, b.tag, c.tag, count(*) as interations
FROM dossiers_tags a, actualites_tags b, fichprat_tags c
GROUP BY a.tag, b.tag, c.tag ORDER BY interations DESC
LIMIT 0, 30";
En fait, ca serait de faire en sorte que les tables soient "collées" et qu'il fasse le tri parmi les trois tables en même temps !
Vous avez une piste ?
merci d'avance!
-

arnaudmn - WRInaute passionné

- Messages: 1536
- Inscription: 11 Mai 2005
Si tous les tags sont différents :
Si le même tags est présent dans 2 tables, tu auras 2 lignes.
- Code: Tout sélectionner
SELECT tag, count(*) as iterations
FROM actualites_tags
GROUP BY tag
union
SELECT tag, count(*)
FROM dossiers_tags
GROUP BY tag
union
SELECT tag, count(*)
FROM fichprat_tags
GROUP BY tag
order by iterations desc
Si le même tags est présent dans 2 tables, tu auras 2 lignes.
-

Joe Le Mort - WRInaute occasionnel

- Messages: 260
- Inscription: 8 Aoû 2006
eessaye de mettre tes résultats séparés dans des tableaux PHP et tu les regroupe dans un seul.
Apres tu joues sur les fonctions array (pour les trier et ordonner) pour ton nuage
Apres tu joues sur les fonctions array (pour les trier et ordonner) pour ton nuage
-

ltressens - WRInaute impliqué

- Messages: 551
- Inscription: 2 Avr 2004
Oui effectivement,
Alors ca peut donner qqchose dans le genre :
Alors ca peut donner qqchose dans le genre :
SELECT tag, sum(iterations) as iterations
FROM (
SELECT tag, count(*) as iterations
FROM actualites_tags
GROUP BY tag
UNION
SELECT tag, count(*) as iterations
FROM dossiers_tags
GROUP BY tag
UNION
SELECT tag, count(*) as iterations
FROM fichprat_tags
GROUP BY tag
)
GROUP BY tag
ORDER BY iterations DESC
- vin-moi
- WRInaute occasionnel

- Messages: 391
- Inscription: 22 Nov 2004
Salut,
héhé merci pour tous vos conseils, vous êtes vraiment sympas !
J'ai donc abouti grace à vos conseils à une requete qui fonctionne au poil :
Mais j'ai encore un petit soucis
J'aimerai pour chaque ligne retournée savoir si il s'agit d'une fiche pratique , d'une actu ou d'un dossier (pour pouvoir rediriger vers la bonne rubrique ensuite ).
Comme vous pouvez le voir, j'ai essayé d'identifier les ID différemment selon la "sous requete" : b.id AS actualite_id et ensuite dans la boucle, je vérifie le quel de actualite_id, dossier_id ou fichprat_id n'est pas null pour pouvoir trouver dans quelle rubrique se trouve le résultat.
Malheureusement ca ne fonctionne pas, et quelque soit la provenance de la ligne, c'est le "actualite_id" qui est pris en compte
.
Vous auriez une piste ?
merci d'avance !
héhé merci pour tous vos conseils, vous êtes vraiment sympas !
J'ai donc abouti grace à vos conseils à une requete qui fonctionne au poil :
- Code: Tout sélectionner
"(SELECT b.id AS actualite_id, b.titre, b.date, b.texte
FROM actualites_tags a, actualites_textes b
WHERE a.actualite_id=b.id
AND (a.tag IN (" . $tagsReady . "))
GROUP BY b.id
HAVING COUNT(b.id)=" . $i . ")
UNION ALL
(SELECT b.id AS dossier_id, b.titre, b.date
FROM dossiers_tags a, dossiers_proprietes b
WHERE a.dossier_id=b.id
AND (a.tag IN (" . $tagsReady . "))
GROUP BY b.id
HAVING COUNT(b.id)=" . $i . ")
UNION ALL
(SELECT b.id AS fichprat_id, b.titre, b.date
FROM fichprat_tags a, fichprat_proprietes b
WHERE a.fichprat_id=b.id
AND (a.tag IN (" . $tagsReady . "))
GROUP BY b.id
HAVING COUNT(b.id)=" . $i . ")
limit 0, 30";
Mais j'ai encore un petit soucis
J'aimerai pour chaque ligne retournée savoir si il s'agit d'une fiche pratique , d'une actu ou d'un dossier (pour pouvoir rediriger vers la bonne rubrique ensuite ).
Comme vous pouvez le voir, j'ai essayé d'identifier les ID différemment selon la "sous requete" : b.id AS actualite_id et ensuite dans la boucle, je vérifie le quel de actualite_id, dossier_id ou fichprat_id n'est pas null pour pouvoir trouver dans quelle rubrique se trouve le résultat.
Malheureusement ca ne fonctionne pas, et quelque soit la provenance de la ligne, c'est le "actualite_id" qui est pris en compte
Vous auriez une piste ?
merci d'avance !
-

arnaudmn - WRInaute passionné

- Messages: 1536
- Inscription: 11 Mai 2005
vin-moi a écrit:Comme vous pouvez le voir, j'ai essayé d'identifier les ID différemment selon la "sous requete" : b.id AS actualite_id et ensuite dans la boucle, je vérifie le quel de actualite_id, dossier_id ou fichprat_id n'est pas null pour pouvoir trouver dans quelle rubrique se trouve le résultat.
Malheureusement ca ne fonctionne pas, et quelque soit la provenance de la ligne, c'est le "actualite_id" qui est pris en compte.
Tu ajoute un élément dans chacunes des requetes, pour identifier ce que tu récupère :
SELECT "actu" as quoi, b.id AS actualite_id, b.titre, b.date, b.texte
(etc)
-

webmasterlamogere - WRInaute passionné

- Messages: 1874
- Inscription: 17 Déc 2006
Joe Le Mort a écrit:eessaye de mettre tes résultats séparés dans des tableaux PHP et tu les regroupe dans un seul.
Apres tu joues sur les fonctions array (pour les trier et ordonner) pour ton nuage
Le plus simple est de faire les 3 requêtes séparées, de tout mettre dans un tableau et de trier ensuite ce tableau avec un petit sort. C'est facile a coder, à maintenir et surement plus performant en temps de traitement.
-

webmasterlamogere - WRInaute passionné

- Messages: 1874
- Inscription: 17 Déc 2006
tu mets ton critère de tri comme première colonne de ton tableau et tu utilises
rsort pour trier en descendant.
rsort pour trier en descendant.
16 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Requête SQL petite question
- Amélioration d'une petite requête SQL
- [PHP/MySQL] Excepter une valeur dans un requête SQL en PHP
- Requete sql complexe en php
- petite aide pour petit probleme sql et php ( de variable
- petite requete sql de "reparation" !
- Requete sql INSERT INTO + SELECT (php)
- requête sql en php pour mysql
- Exportation d'une requete SQL vers Excel via PHP
- problème requête SQL dans une fonction PHP
- Google API : guide de développement de l'API Google - 20-09-2002
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Nombre moyen de mots par requête : statistiques AOL Août 2006 - 10-08-2006
- Google Deskbar : la recherche sur votre bureau - 07-11-2003
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006 - 11-08-2006
- 2 nouvelles pages sur WebRankInfo - 09-03-2003
- Informations sur l'infrastructure technique de Google - 01-11-2004
- Google indexe le Flash - 28-04-2004
Consultez la description détaillée des produits ou services de Google suivants : Gmail Notifier
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


