04/10/2010, 18:10:26
tu auras compris qu'il y a un sérieux soucis de performance avec ton système donc par habitude prend toujours soins de NE PAS faire de requêtes SQL dans une boucle.
alors comment qu'on fait ???
SQL (mysql / oracle / postgresql / ...) implémente un système de liaison inter-table que l'on appel l'Union et ca fait sa force (oui l'union fait la force c'est bien connu)
Je t'invites évidement à lire la documentation là dessus mais en synthétique pour ton cas présent... et sans avoir testé que dalle de mon côté ... je te proposerais ce code SQL
Attention : pour des soucis de lisibilité de code j'utilise les notions de pseudonyme de table
en rouge le principe d'Union qui sera sans doute à peaufiner pour intégrer les news n'ayant aucune info côté valeur complémentaire
pour mémoire, tes propres requêtes
Alors il y a aucune chance que ma requête fonctionne du premier coup hein ^^ mais tu peux y trouver une bonne source pour ensuite l'adapter à ton besoin et surtout supprimer un maximum de code et optimiser ton algo : 1 requête, certes plus complexe, qui renvois 50 lignes, et c'est tout !
Cette requête tu vas la lire, la comprendre et la tester dans un phpmyadmin avant de l'intégrer dans PHP. Si tu as un soucis, préviens moi, je ferrais ce que je peux pour la corriger
alors comment qu'on fait ???
SQL (mysql / oracle / postgresql / ...) implémente un système de liaison inter-table que l'on appel l'Union et ca fait sa force (oui l'union fait la force c'est bien connu)
Je t'invites évidement à lire la documentation là dessus mais en synthétique pour ton cas présent... et sans avoir testé que dalle de mon côté ... je te proposerais ce code SQL
Attention : pour des soucis de lisibilité de code j'utilise les notions de pseudonyme de table
Citation :SELECT c.news_category_id, c.news_category_name, n.news_id, n.news_title, n.news_date, u.username, f1.value as champs5, f2.value as champs6
FROM
as1_module_news_categories c,
as1_module_news n
LEFT JOIN as1_module_news_fieldvals f1 ON f1.news_id = n.news_id
LEFT JOIN as1_module_news_fieldvals f2 ON f2.news_id = n.news_id,
as1_users u,
WHERE
c.parent_id = 7
AND f1.fielddef_id = 1
AND f2.fielddef_id = 3
AND c.news_category_id = n.news_category_id
AND u.username = n.author_id
ORDER BY
c.hierarchy ASC, n.news_date ASC
en rouge le principe d'Union qui sera sans doute à peaufiner pour intégrer les news n'ayant aucune info côté valeur complémentaire
pour mémoire, tes propres requêtes
Citation :SELECT news_category_id, news_category_name FROM as1_module_news_categories WHERE parent_id = 7 ORDER BY hierarchy
SELECT news_id, news_title, news_date, author_id FROM as1_module_news WHERE news_category_id = '$CodeCategory' ORDER BY news_date
SELECT username FROM as1_users WHERE user_id = '$CodeAuteur
SELECT fielddef_id, value FROM as1_module_news_fieldvals WHERE news_id = '$CodeNews' SORTED BY fielddef_id
Alors il y a aucune chance que ma requête fonctionne du premier coup hein ^^ mais tu peux y trouver une bonne source pour ensuite l'adapter à ton besoin et surtout supprimer un maximum de code et optimiser ton algo : 1 requête, certes plus complexe, qui renvois 50 lignes, et c'est tout !
Cette requête tu vas la lire, la comprendre et la tester dans un phpmyadmin avant de l'intégrer dans PHP. Si tu as un soucis, préviens moi, je ferrais ce que je peux pour la corriger