v2.5.2
Giriş yap

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

emregemici
314 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
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Cevaplar (4)
gokcin
432 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();
}
?>


PHP
database
438 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;
}

PHP
<div>
    Menu
    <?= menu() ?>
</div>
HTML

gibi.

emregemici
461 gün önce

c1 c2 nerden geliyor hocam?

eminkurt
461 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;

SQL