J'essaie d'apprendre MySQL, j'ai donc créé un petit système de blog.MySQL: Obtenir des messages de catégories
J'ai 3 tables MySQL:
posts
:
id | title
----------------
1 | Post Title 1
2 | Post Title 2
categories
:
id | title | parent
--------------------------------
10 | category10 | 0
11 | category11 | 0
12 | category12 | 10
post_category_relations
:
id | post_id | category_id
----------------------------------
1 | 1 | 10
2 | 2 | 12
3 | 3 | 11
Chaque poste peut avoir plusieurs catégories, leur relation est stockée dans post_category_relations:
Alors, quand je visite index.php catégorie = 10, je voudrais obtenir chaque poste ce qui est lié à category10
, y compris les postes de sa dossier enfant category12
ainsi.
Mon Unfinished Snippet en PHP
$folder_id = $_GET["category"]; // Get Category ID from the URL
$sql = "SELECT * FROM posts
JOIN categories
JOIN post_category_relations
// And I don't really know what should I do here
// because I need the child categories first, then the relations
// then I can get the post too from the post_id of the relations
";
mysql_query($sql);
Je sais que cela nécessitera des compétences MySQL avancé, mais toute aide est appréciée! Je l'ai déjà fait en PHP mais j'ai besoin d'utiliser 4 boucles ce qui n'est pas la meilleure façon de le faire quand c'est possible en MySQL, je ne sais pas encore comment :)
d'abord si vous devez échapper à votre entrée get avant de faire une requête (pour empêcher les injections SQL) this: $ folder_id = $ _GET ["category"]; devrait être: $ folder_id = mysql_real_escape_string (stripslashes ($ _ GET ["category"])); – Tim
Je vous suggère également de lire les articles @Denis fournis. Vous apprendrez beaucoup :) Je les ai lu moi-même plusieurs fois. – Rifat
Utilisez les variables de session MySQL: http://explainextended.com/2009/09/29/adjacency-list-vs-nested-sets-mysql/. Voir aussi cette question pour d'autres options: http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database – orangepips