v2.5.2
Giriş yap

Kategorileri başlık olacak şekilde listeleme mantığı

emregemici
134 defa görüntülendi

ö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.

Cevap yaz
Cevaplar (4)
gokcin
92 gün önce

<?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 "&nbsp;&nbsp;&nbsp;$lesson<br>";
        }
    }
} catch (PDOException $e) {
    echo "Veritabanı hatası: " . $e->getMessage();
}
?>


database
98 gün önce

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.

emregemici
120 gün önce

c1 c2 nerden geliyor hocam?

eminkurt
121 gün önce
SELECT 
    c1.value AS parent_category,
    c2.value AS child_category,
    l.value AS lesson
FROM lessons l
JOIN category c1 ON l.category_id = c1.id
LEFT JOIN category c2 ON c1.id = c2.parent_id
ORDER BY c1.id, c2.id, l.id;