Kategorileri başlık olacak şekilde listeleme mantığı
örneğin, bir veritabanım var:
tablo adı: category
id 1 value PHP
id 2 value CSS
id 3 value HTML
olsun.
dersler diye ayrı bir tablom var o da
tablo adı: lessons
id 1 value Diziler category 1
id 2 value Fonksiyonlar category 1
id 3 value Formlar category 3
id 4 value Sıfırlama category 4
olsun
LEFT JOIN veya INNER JOIN kullanarak verileri çekiyorum.
ancak;
PHP
Diziler
Fonskiyonlar
CSS
Sıfırlama
HTML
Formlar
şeklinde çekmek istiyorumç. Kategorileri çekeyim. altında hangi kategoriye ait dersler varsa onlar gelsin. recursive dışı bi şekilde yapılıyodu mantığını kuramadım.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
<?php
try {
// Veritabanı bağlantısı
$pdo = new PDO("mysql:host=localhost;dbname=your_database_name;charset=utf8", "your_username", "your_password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Kategorilere ve derslere ait verileri çek
$query = "
SELECT c.id AS category_id, c.value AS category_value, l.value AS lesson_value
FROM category c
LEFT JOIN lessons l ON c.id = l.category_id
";
$stmt = $pdo->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Verileri düzenleyip ekrana bastır
$categories = [];
foreach ($result as $row) {
$category_id = $row['category_id'];
$category_value = $row['category_value'];
$lesson_value = $row['lesson_value'];
if (!isset($categories[$category_id])) {
// Kategori ilk defa karşılaşıldıysa, yeni bir dizi oluştur
$categories[$category_id] = [
'category_value' => $category_value,
'lessons' => [],
];
}
// Kategoriye ait dersleri ekleyerek düzenle
if ($lesson_value !== null) {
$categories[$category_id]['lessons'][] = $lesson_value;
}
}
// Sonuçları ekrana bastır
foreach ($categories as $category) {
echo "<b>{$category['category_value']}</b><br>";
foreach ($category['lessons'] as $lesson) {
echo " $lesson<br>";
}
}
} catch (PDOException $e) {
echo "Veritabanı hatası: " . $e->getMessage();
}
?>
Yani bunun en sağlıklı hali recursive gibi görünüyor ama.
$db = new PDO(...);
function menu($parent_id = 0) {
global $db;
$menuler = $db->query("SELECT id, baslik FROM menuler WHERE parent_id = $parent_id")->fetchAll(PDO::FETCH_ASSOC);
foreach($menuler as $menu):
?>
<div>
<?= $menu['baslik'] ?>
<div><?= menu($menu['id']) ?></div>
</div>
<?php
endforeach;
}
<div>
Menu
<?= menu() ?>
</div>
gibi.