Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP, MYSQL Kueri Bersarang

Saya membuat kueri Gordon sedikit lebih sederhana. Sekarang benar-benar memenuhi kebutuhan Anda.

SELECT
    `name`
FROM 
    (
        (SELECT 'project' as `type`, `name`, `id` as `projectid` FROM `Project`)
        UNION ALL
        (SELECT 'todo' as `type`, `name`, `projectid` FROM `Todo`)
    ) as `combined`
ORDER BY
    `project_id`, `type`

PHP untuk mendapatkan daftar semua baris saja:

$q = $db->query("SELECT `name` FROM ((SELECT 'project' as `type`, `name`, `id` as `project_id` FROM `projects`) union all (SELECT 'todo' as `type`, `name`, `project_id` FROM `todos`)) as `combined` ORDER BY `project_id`, `type`");

while($row = $q->fetch_object()) {
    echo $row->name . '<br />';
}

PHP untuk mendapatkan daftar bersarang dengan kueri 'rumit':

$q = $db->query("SELECT `name`, `type` FROM ((SELECT 'project' as `type`, `name`, `id` as `project_id` FROM `projects`) union all (SELECT 'todo' as `type`, `name`, `project_id` FROM `todos`)) as `combined` ORDER BY `project_id`, `type`");

echo '<ul>';

$needToBeClosed = false;

while($row = $q->fetch_object()) {
    if($row->type == 'project' AND $needToBeClosed) {
        echo '</ul></li>';
        $needToBeClosed = false;
    }

    echo '<li>' . $row->name;

    if($row->type == 'project') {
        echo '<ul>';
        $needToBeClosed = true;
    } else {
        echo '</li>';
    }
}

if($needToBeClosed) {
    echo '</ul></li>';
}

echo '</ul>';

Tetapi seperti yang Anda lihat, semakin banyak yang Anda coba lakukan dalam kueri Anda. Semakin banyak PHP yang dibutuhkan untuk menggunakannya dengan cara yang sederhana. Jadi, Anda perlu menemukan keseimbangan antara SQL dan PHP untuk mendapatkan kode terbaik. Saya biasanya tidak menggunakan pendekatan di atas, tetapi hanya melakukan beberapa kueri seperti ini:

PHP untuk mendapatkan daftar bersarang tanpa kueri 'rumit':

$projects = $db->query('SELECT * FROM `projects`');

echo '<ul>';

while($project = $projects->fetch_object()) {
    echo '<li>' . $project->name . '<ul>';
    $todos = $db->query('SELECT * FROM `todos` WHERE `project_id` = ' . $project->id);

    while($todo = $todos->fetch_object()) {
        echo '<li>' . $todo->name . '</li>';
    }

    echo '</ul></li>';
}

echo '</ul>';

Anda masih perlu memodifikasi kueri untuk kebutuhan Anda sendiri (nama tabel dan semacamnya).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penanganan &Pembatasan Koneksi dengan ProxySQL

  2. Cara mengeksekusi 2 atau lebih kueri SQL di PHP tanpa bergabung dengan tabel

  3. Simpan file PDF di MySQL

  4. mysql show Hitungan baris dari tabel lain di setiap baris

  5. Menggunakan Pernyataan IF dalam kueri MySQL SELECT