Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[RESOLU] Jointures de tables et tableaux associatifs dans une UDT
#1

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.12.x
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,

Je rencontre quelques difficultés avec le mode "search" de ListItExtended (ListIt2) (en gros, impossible de rechercher avec les catégories et surtout les résultats me semblent hasardeux avec certains champs que j'ai créé bref, ce n'est pas vraiment le sujet).
J'essaie donc dans un premier temps de créer une UDT qui me permettrait de lister chaque "item" de mon listIt.
J'ai donc repéré les 6 tables utilisées pour mon instance (que j'ai appelé "ressources"):

cms_module_listit2ressources_category (liste les catégories)
cms_module_listit2ressources_fielddef (liste les types de champs que j'ai créé)
cms_module_listit2ressources_fielddef_opts (liste les options des types de champs créé => je n'utilise pas)
cms_module_listit2ressources_fieldval (liste les valeurs des types de champs que j'ai créé)
cms_module_listit2ressources_item (liste les différents item (id + titre de l'item))
cms_module_listit2ressources_item_categories (relation entre les items et les catégories).

J'essaie donc simplement d'afficher chaque ressource : Son Id, son titre, sa catégorie liée et les différents champs "custom" que j'ai créé avec le couple : clé => valeur).

Voici mon UDT contenant ma requête :

Code :
[== Indéfini ==]
//Je récupère le connecteur de la bdd
$db = cmsms()->GetDb();

// Création et éxécution de la requête
//V1 Tout ensemble => problème 1 ligne par type de valeurs...
$sql = 'SELECT DISTINCT
        item.item_id AS id,
        item.title AS title,
        item.active AS active,

        item_cat.category_id AS cat_id,
        item_cat.item_id AS item_id,

        category.category_id,
        category.category_name as cat_name,
        category.category_alias as cat_alias,

        fieldval.item_id as fkItemId,
        fieldval.fielddef_id as fkfieldefId,
        fieldval.value as theVal,

        fielddef.fielddef_id,
        fielddef.name as valueTitle

        FROM `'.cms_db_prefix().'module_listit2ressources_item` AS item
        LEFT JOIN `'.cms_db_prefix().'module_listit2ressources_item_categories` AS item_cat
            ON item.item_id = item_cat.item_id
        LEFT JOIN `'.cms_db_prefix().'module_listit2ressources_category` AS category
            ON item_cat.category_id = category.category_id
        LEFT JOIN `'.cms_db_prefix().'module_listit2ressources_fieldval` AS fieldval
            ON item.item_id = fieldval.item_id
        LEFT JOIN `'.cms_db_prefix().'module_listit2ressources_fielddef` AS fielddef
            ON fieldval.fielddef_id = fielddef.fielddef_id

        WHERE item.active=1
        ';
$articles = $db->Execute($sql);


echo "<table>";
while ($row = $articles->FetchRow())
{
echo <<<REQUETE
<tr>
<td>Article id : {$row['id']}</td>
<td>Titre : {$row['title']}</td>
<td>Active : {$row['active']}</td>
<td>Category id : {$row['cat_id']}</td>
<td>Item id : {$row['item_id']}</td>
<td>Categorie : {$row['cat_name']}</td>
<td>Id: {$row['fkItemId']}<br/>{$row['valueTitle']} : {$row['theVal']}</td>
</td>
</tr>
REQUETE;
}
echo "</table>";

Et voilà le résultat qui est retourné :
[Image: prob.jpg]

Mon problème est donc le suivant :
Je ne voudrai qu'une seule ligne pour l'item avec l'id 328. Ici il en créait autant qu'il y a de champs customs créés (dernière colonne : date, type, langue, source).

J'ai pensé utiliser GROUP_CONCAT, mais du coup je n'ai pas l'association nom du champ => valeur, mais tous les noms de champs regroupés ensemble et toutes leurs valeurs regroupées ensemble...

Je ne vois pas quel type de requête je dois faire, je pense qu'il faut faire une seconde boucle (qui liste les champs custom : fielddef et fieldval) dans la boucle qui liste les articles? Mais comment?

Je regarde les sources de ListIt2 mais je ne suis pas très à l'aise avec les objets du coup j'ai du mal à me repérer.

Si quelqu'un à une piste à me donner, ne serait-ce qu'une piste pour faire des recherches google, je suis preneur!

Merci Smile
Sujet fermé


Messages dans ce sujet

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)