I try to build a simple blog system. database table like below.
Posts
x
+----+----------+-------------+
|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