Accueil   Accueil    Forum   Forum    Download   Download    Livre d'or   Livre d'or    Contact   Contact    Liens Web   Liens Web

[requêtes SQL] construction ... - CMS KwsPHP - Le site clés en main

Colonne de gauche

Espace membre

Privé Masquer le formulaire de connexion


Se souvenir de moi ?


Mot de passe oublié

Menu

Forum

Sujets Importants

fleche basForum : Masquer l’entête

Accès rapide :

 

Effectuer une Recherche avancée OU


fleche bas[Résolu] [requêtes SQL] construction ...  [12 réponses]

puce Index du Forum  » Divers  » Webmastering


Répondre


fleche bas

σjulkien
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 2484 (0.35/Jour)
Inscrit(e) le: 19 juin 2007
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 13:17  
Bonjour tous le monde,

Y'a une requêtes qui me coince car je n'arrive pas à la construire...

En faite, pour résumer j'ai une table de catégories et une table pour les sous catégories.

Pour la présentation, je doit appeler les sous catégories sous chaque catégories correspondante.

L'id de la catégorie est repris dans un champ idcat dans la table sous catégorie pour voir a qu'elle catégorie appartient chaque sous catégorie.

Je doit donc afficher sur une page toutes les catégories avec en dessous de chaque catégories les sous catégories leurs appartenant.

Voici ce que j'ai commencer a faire :


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.     echo '<fieldset>
  5.                 <table width="100%">';
  6.  
  7.  
  8.  
  9.     $req_catvente = reqmysql('SELECT * FROM `vente_categorie` ORDER BY `id` ');
  10.     if(mysql_num_rows($req_catvente) > 0)
  11.     {
  12.         while($row_catvente = mysql_fetch_array($req_catvente))
  13.         {
  14.  
  15.         echo '<tr><td style="background-image: url(modules/vente/images/genrebox.png);background-repeat:repeat-x; background-position:bottom;vertical-align:top;left;width:315px;height:138px;border:grey;">
  16.                 <br style="font-size:3px" /><div style="text-align:center;">
  17.                 <a href="index.php?mod=vente&amp;ac=pagecat&amp;int_id='.ax($row_catvente['id']).'&amp;sql_classe=0">
  18.                 <font style="color:#8000FF;">'.ax($row_catvente['cat']).'</font></a></div><br />
  19.                 <br />
  20.                     </td></tr>';
  21.  
  22.         }
  23.     }
  24.  
  25. echo '</tr></table></fieldset><br />';
  26.  
  27. #####!!!#####
  28. ?>


Donc la j'appelle bien mes catégories sans problèmes, mais il me faut afficher dans la même cellule les sous catégories.

Si quelqu'un pourrait m'éclairer sur ce point, parce que j' ai tenté beaucoup de chose mais j'arrive à rien ....

Merci d'avance à ceux qui sauront m'aider smiley sg3agg29g.gif



nota :

-le champ `idcat` de la table `vente_soucategorie` == le champ `id` (de la table `vente_categorie`)

-le champ `titre` de la table `vente_soucategorie` == nom de la sous cat.


Le temps file....


Infos CMS KwsPHP


Informations : Avant de poster un sujet sur le forum

Veuillez avant tout vérifiez la comparaison de vos fichiers sur votre site
Mon compte / Outils / Comparaison


La recherche avancée du forum (en ciblant au mieux les options de la recherche)
La Faq - La documentation - La documentation en vidéo - Le sujet "Install et Mise à jour"
Vous devez lire en priorité le topic de la 1.6 pour en découvrir ses fonctionnalités


Afficher



ΦOtocinclus
Administrateur
stars7.png


avatar
Hors ligne

Nombre de posts: 3163 (0.43/Jour)
Inscrit(e) le: 02 septembre 2006
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 14:14  
et si tu fais un LEFT JOIN vente_souscat ON vente_souscat.idcat = vente_cat.id ça ne le fait pas ?


LES C0NS, ÇA OSE TOUT. C'EST MÊME À ÇA QU'ON LES RECONNAÎT.

Michel Audiard


σjulkien
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 2484 (0.35/Jour)
Inscrit(e) le: 19 juin 2007
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 14:21  
Salut Oto,

Hier j'ai vu avec foupoudave, mais je ne veux pas trop le déranger plus longtemps, mais il m'avait donner ça :

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5. $df_requete =  reqmysql('
  6.     SELECT        *
  7.     FROM `vente_categorie`
  8.     JOIN `vente_soucategorie`
  9.         ON        `vente_soucategorie`.`idcat` = `vente_categorie`.`id`
  10.  
  11. #####!!!#####
  12. ?>


Le hic c'est que ça me pond un affichage d'une souscatégorie par catégorie (en gros les catégories s'affichent autant de fois que y'a de sous catégories).

Le problème c'est que les JOIN / LEFT JOIN et compagnie c'est absolument pas du tout mon fort, et tu l'a remarquer parce que j'ai déjà demander ton aide y'a pas très longtemps smiley sg3agD.gif

Bref, je veut bien un JOIN (ne te méprend pas, je suis pas un Tox smiley sg3agD.gif ), mais je n'arrive pas a le mettre en place ..

Merci de ton aide en tout cas smiley sg3agg29g.gif
Édité 1 fois - Dernière édition: 08/03/2009 à 14:22 Par julkien. Raison: humour


Le temps file....


σpatami
starsj3.png
Habitué


avatar
Hors ligne

Nombre de posts: 444 (0.06/Jour)
Inscrit(e) le: 24 juin 2006
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 14:31  
c'est normal que la catégorie principale se répète, il faut jouer avec des conditions en php pour qu'elle ne s'affiche qu'une fois smiley sg3agg29g.gif

pour ce faire tu utilises une variable $last_id_cat, que tu places à la fin de ta boucle, et à laquelle tu donnes comme valeur l'id de la catégorie principale.

Il suffit par après d'ajouter une condition pour l'affichage du nom de la catégorie principale :

if ($last_id_cat != $resultat['id_cat'])

où $resultat['id_cat'] est la variable contenant l'id de la catégorie en cours (tirée de mysql_fetch_array).

C'est clair ? smiley sg3agp.gif


σjulkien
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 2484 (0.35/Jour)
Inscrit(e) le: 19 juin 2007
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 15:14  
je pensais bien jouer avec les conditions, mais a vrai dire, j'ai pas tout capté là smiley sg3agD.gif


Citation :

pour ce faire tu utilises une variable $last_id_cat, que tu places à la fin de ta boucle, et à laquelle tu donnes comme valeur l'id de la catégorie principale.



Heu oui, m'enfin la y'a plusieurs catégories (autant que l'ont souhaite). et pourquoi en fin de boucle ?

bon, mais je commence tout de même à comprendre mon problème smiley sg3agD.gif

Réponse ci-dessus posté le dimanche 08 mars 2009 : 14:56



Bon j'ai bricolé ça en fonction de ce que j'ai compris :


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.     $req_catvente = reqmysql(' SELECT * FROM `vente_categorie` JOIN `vente_soucategorie` ON    `vente_soucategorie`.`idcat` = `vente_categorie`.`id` ');
  5.     if(mysql_num_rows($req_catvente) > 0)
  6.     {
  7.         while($row_catvente = mysql_fetch_array($req_catvente))
  8.         {
  9.         if ($last_id_cat != $row_catvente['id_cat'])
  10.         echo '<tr><td style="background-image: url(modules/vente/images/genrebox.png);background-repeat:repeat-x; background-position:bottom;vertical-align:top;left;width:315px;height:138px;border:grey;">
  11.                 <br style="font-size:3px" /><div style="text-align:center;">
  12.                 <a href="index.php?mod=vente&ac=pagecat&int_id='.ax($row_catvente['id']).'&sql_classe=0">
  13.                 <font style="color:#8000FF;">'.ax($row_catvente['cat']).'</font></a></div><br />
  14.                 <br />'.$row_catvente['titre'].'
  15.                     </td></tr>';
  16.         $last_id_cat == $row_catvente['idcat'];
  17.         }
  18.     }
  19.  
  20. #####!!!#####
  21. ?>


La bon plus rien ne s'affiche smiley sg3agD.gif

Je fait donc une grosse boulette oui, mais lequel ?

A bientôt

PS : autre problème avec un join comment ont ressort l'id des sous cat et l'id des cat parce que la ca s' emmêle...
Édité 1 fois - Dernière édition: 08/03/2009 à 15:21 Par julkien.


Le temps file....


σmike007
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 7551 (1.02/Jour)
Inscrit(e) le: 05 juillet 2006
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 16:31  

Citation de patami :
c'est normal que la catégorie principale se répète, il faut jouer avec des conditions en php pour qu'elle ne s'affiche qu'une fois smiley sg3agg29g.gif

pour ce faire tu utilises une variable $last_id_cat, que tu places à la fin de ta boucle, et à laquelle tu donnes comme valeur l'id de la catégorie principale.

Il suffit par après d'ajouter une condition pour l'affichage du nom de la catégorie principale :

if ($last_id_cat != $resultat['id_cat'])

où $resultat['id_cat'] est la variable contenant l'id de la catégorie en cours (tirée de mysql_fetch_array).

C'est clair ? smiley sg3agp.gif



et un LEFT JOIN avec en fin de requete

GROUP BY `vente_soucategorie`.`idcat`
ORDER BY `vente_categorie`.`idcat` ASC, `vente_soucategorie`.`idcat` ASC

ça permettrait normalement d'eviter ce traitement ?

pour recuperer un champ julkien avec un JOIN ou LEFT JOIN, il faut le précéder du nom de la table (cf. le group by par exemple)


Vous êtes satisfait de l'aide apportée !! Vous avez l'âme généreuse !!

Faite un don du montant souhaité
Un petit don (même de 1 euro) de chaque personne satisfaite permet de témoigner de votre reconnaissance pour le temps passé. merci


Mes Modules ou ceux que j'ai repris en V1.6 : ICI. Module Humour
bbcode_sup => Voir le forum dédié (youtube, daily, zoomimg, deezer, divx, clearbox, apostrophe word, etc...)


ΦOtocinclus
Administrateur
stars7.png


avatar
Hors ligne

Nombre de posts: 3163 (0.43/Jour)
Inscrit(e) le: 02 septembre 2006
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 17:33  

Citation de julkien :
PS : autre problème avec un join comment ont ressort l'id des sous cat et l'id des cat parce que la ca s' emmêle...


SELECT vente_catedorie.id AS idcat, vente_souscategorie.id AS idsscat .....


LES C0NS, ÇA OSE TOUT. C'EST MÊME À ÇA QU'ON LES RECONNAÎT.

Michel Audiard


Imprimer Permalien dimanche 8 mars 2009 à 18:20  
Yop,

J'ai galèré a faire un truc potable pour mon annuaire et j'ai finalement opté pour cette solution :

Une table unique pour catégorie et sous catégories. Simple mais efficace.

Voici la structure de la table ainsi que les 10 premiers enregistrement qui appartiennent tous a la même catégorie principale.

CREATE TABLE IF NOT EXISTS `annu_categorie` (
`id_categorie` bigint(20) NOT NULL auto_increment,
`pere` text character set latin1 collate latin1_general_ci,
`ascendance` text character set latin1 collate latin1_general_ci,
`categorie` text character set latin1 collate latin1_general_ci,
`arborescense` text character set latin1 collate latin1_general_ci,
`pere_id` bigint(20) default NULL,
`arbonum` text character set latin1 collate latin1_general_ci,
`nbsite` int(11) default '0',
PRIMARY KEY (`id_categorie`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=125 ;

--
-- Contenu de la table `annu_categorie`
--

INSERT INTO `annu_categorie` (`id_categorie`, `pere`, `ascendance`, `categorie`, `arborescense`, `pere_id`, `arbonum`, `nbsite`) VALUES
(1, 'aucune', 'aucune', 'Achats en ligne', 'Achat en ligne', 0, '1', 39),
(2, 'Achats en ligne', 'Achat en ligne', 'Achats groupés', 'Achats en ligne > Achats groupés', 1, '1>2', 0),
(3, 'Achats en ligne', 'Achats en ligne', 'Acheter des bijoux', 'Achats en ligne > Acheter des bijoux', 1, '1>3', 4),
(4, 'Acheter des Bijoux', 'Achats en ligne > Acheter des Bijoux > Bijoux de luxe', 'Bijoux de luxe', 'Achats en ligne > Acheter des Bijoux > Bijoux de luxe', 3, '1>3>4', 0),
(5, 'Acheter des Bijoux', 'Achats en ligne > Acheter des Bijoux', 'Bijoux fantaisie', 'Achats en ligne > Acheter des Bijoux > Bijoux fantaisie', 3, '1>3>5', 1),
(6, 'Acheter des Bijoux', 'Achats en ligne > Acheter des Bijoux\r\n', 'Bijoux piercing\r\n', 'Achats en ligne > Acheter des Bijoux > Bijoux piercing\r\n', 3, '1>3>6', 3),
(7, 'Achats en ligne', 'Achats en ligne', 'Acheter des Chaussures', 'Achats en ligne > Acheter des Chaussures', 1, '1>7', 0),
(8, 'Achats en ligne', 'Achats en ligne', 'Acheter des livres', 'Achats en ligne>Acheter des livres', 1, '1>8', 0),
(9, 'Achats en ligne', 'Achats en ligne', 'Acheter du thé en ligne', 'Achats en ligne>Acheter du thé en ligne', 1, '1>9', 0),
(10, 'Achats en ligne', 'Achats en ligne', 'Acheter une voiture', 'Achats en ligne>Acheter une voiture', 1, '1>10', 2);

Ensuite tu n'a plus qu'a faire un petit code tout  *** CENSURED ***  en php et hop tu affiche tout ce que tu souhaite smiley sg3agp.gif

Si cela peut t'aider.

PS : LA structure de la table n'est pas de moi et je ne me sert pas de tout comme arborescence et arbonum mais je l'avais gardé au cas ou un jour j'aurais besoin de faire un truc plus sophistiqué.


σjulkien
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 2484 (0.35/Jour)
Inscrit(e) le: 19 juin 2007
Visiter son site
Imprimer Permalien dimanche 8 mars 2009 à 19:52  
Je vient de passer un temp fous, enfin surtout a comprendre ce que mike faisait en live chez moi ...

C'est pas évident de dire la solution trouvé, mais oui maintenant y'a plus qu'une table, t y'a un traitement de fous, pour tout faire concorder smiley sg3agg29g.gif

Je tag résolu smiley sg3agg29g.gif

Le temps file....


Imprimer Permalien dimanche 8 mars 2009 à 20:59  
Tu a pris ma solution? Si c'est pas trop demandé, j'aimerais bien voir ton code si la solution est différente. Juste pour voir ou j'ai chiotté et peut être améliorer mon système.

Merci


σjulkien
starsj7.png
Dieu Supreme


avatar
Hors ligne

Nombre de posts: 2484 (0.35/Jour)
Inscrit(e) le: 19 juin 2007
Visiter son site
Imprimer Permalien lundi 9 mars 2009 à 04:17  
Salut,

Non je n'est pas suivit ton conseil, malgré qu'il soit bon smiley sg3agg29g.gif

Voici donc ma requète telle quelle est maintenant :


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.     $req_catvente = reqmysql('SELECT
  5.                     `vente_categorie`.`id` AS id_categorie,
  6.                     `vente_categorie`.`id_ref` AS id_ref,
  7.                     `vente_categorie`.`cat` AS cat_categorie,
  8.                     `vente_categorie`.`desc`,
  9.                     `vente_article`.`id` AS id_article,
  10.                     `vente_article`.`cat` AS cat_article,
  11.                     `vente_article`.`desc`
  12.         FROM `vente_categorie`
  13.         LEFT JOIN `vente_article`
  14.             ON        `vente_categorie`.`id`=`vente_article`.`soucat`
  15.         ORDER BY `position` ASC, `sous_position` ASC
  16.         ');
  17.  
  18. #####!!!#####
  19. ?>



Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4. CREATE TABLE IF NOT EXISTS `vente_categorie` (
  5.   `id` int(10) unsigned NOT NULL auto_increment,
  6.   `id_ref` int(10) NOT NULL default '0',
  7.   `cat` text NOT NULL,
  8.   `desc` text NOT NULL,
  9.   `position` int(2) NOT NULL default '0',
  10.   `sous_position` int(2) NOT NULL default '0',
  11.   PRIMARY KEY  (`id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  13.  
  14. #####!!!#####
  15. ?>


Si ça peut aider smiley sg3agg29g.gif

A bientôt ^^
Édité 1 fois - Dernière édition: 09/03/2009 à 04:20 Par julkien.


Le temps file....


fleche bas[Résolu] [requêtes SQL] construction ...  [12 réponses]

Répondre



puce Index du Forum  » Divers  » Webmastering