I try to build a simple blog system. database table like below.
Posts
+----+----------+-------------+ |id | title | content | +----+----------+-------------+ |1 | Tile | Content | +----+----------+-------------+ |2 | Tile 2 | Content 2 | +----+----------+-------------+
Categories
+--------+-------------+ |id | category | +--------+-------------+ |1 | Category1 | +--------+-------------+ |2 | Category2 | +--------+-------------+ |3 | Category3 | +--------+-------------+
Post-Categories
+--------+-------------+ |postID | categoryID | +--------+-------------+ |1 | 1 | +--------+-------------+ |1 | 2 | +--------+-------------+ |1 | 3 | +--------+-------------+ |2 | 2 | +--------+-------------+ |2 | 3 | +--------+-------------+
I use this code
<?php $posts = DB::get("SELECT * FROM `posts` LIMIT 5"); foreach ($posts as $post) { echo $post["title"]; $category_ids = DB::get("SELECT categoryID FROM `post_categories` WHERE postID = " . $post["id"]); $ids = join(", ", $category_ids); $categorys = DB::get("SELECT * FROM `categories` WHERE id IN (" . $ids . ")"); foreach ($categorys as $category) { echo '<a href="...">' . $category["category"] . '</a>'; } echo $post["content"]; } ?>
I know this is not a good way fetching categories.
Even It query same category over and over and over again.
Can anyone give me some guideline/resources/tutorials to learn PHP logics, OOP, Best Practices. How may I handle this with OOP PHP.
And please also provide your ans for fetching categories.
I don’t want to join the post_categories
and posts
table to fetching data because there are few more columns in there.
Also there may have multiple category in a single post.
Advertisement
Answer
why you don’t want join .. your code is more complex and time expensive that a single joined query
SELECT * FROM `posts` LIMIT 5 SELECT p.content, p.title, c.category FROM `categories` c INNER JOIN `post_categories` pc on pc.id = c.id INNER JOIN ( SELECT id, content, title FROM `posts` LIMIT 5 ) p on p.id = c.id