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

Bagaimana saya bisa mengisi baris bernomor tabel HTML berdasarkan apakah mereka cocok dengan nomor baris?

Berdasarkan pertanyaan Anda sebelumnya, setiap ustartlocation unik (karenanya Anda dapat menggunakannya sebagai indeks di $devices . Anda Himpunan). Dengan menggunakan konsep yang sama, Anda dapat mengisi $devices larik dari "ustartlocation ke (ustartlocation + (usize - 1)) ".

$devices = array();
while($row = mysql_fetch_array($result_devices)) {
    $endLocation = ($row['ustartlocation'] + ($row['usize'] - 1));
    for ($location = $row['ustartlocation']; $location <= $endLocation; $location++) {
        $devices[$location] = $row['devicename'];
    }
}

Karena loop tampilan Anda sudah berulang melalui setiap U dan menampilkan perangkat yang ditetapkan, Anda tidak perlu mengubah bagian lainnya. Namun, peringatan untuk ini adalah bahwa nama perangkat akan diulang untuk setiap U bukannya span dia. Untuk rentang itu, kita perlu melakukan sedikit lebih banyak pekerjaan.

Untuk memulai, kita cukup menyimpan usize di $devices array alih-alih mengisi setiap posisi individu. Selain itu, untuk mencegah banyak pekerjaan/perhitungan tambahan di kemudian hari, kami juga akan menyimpan perangkat "placeholder" untuk setiap posisi tambahan.

while($row = mysql_fetch_array($result_devices)) {
    // get the "top" location for the current device
    $topLocation = ($row['ustartlocation'] + $row['usize'] - 1);

    // populate the real position
    $devices[$topLocation] = $row;

    // generate a list of "placeholder" positions
    for ($location = ($topLocation - 1); $location >= $row['ustartlocation']; $location--) {
        $devices[$location] = 'placeholder';
    }
}

Selanjutnya, di loop tampilan Anda, Anda akan memeriksa apakah posisi saat ini adalah placeholder atau tidak (jika demikian, cukup tampilkan U dan tidak melakukan apa pun untuk perangkat; jika tidak, tampilkan perangkat, atau 'kosongkan'). Untuk mencapai efek "span" untuk setiap perangkat, kami akan menyetel rowspan sel sama dengan usize perangkat . Jika 1 , itu akan menjadi satu sel; 2 , itu akan menjangkau 2 baris, dll (inilah sebabnya "tidak melakukan apa-apa" untuk perangkat di baris-tempat penampung akan berfungsi):

for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {   
    $u = $cabinets_sqlrow[2] - $i;
    echo "<tr>";
    echo '<td width="15px" align="right">' . $u . '</td>';
    if (isset($devices[$u])) {
        // we have a "device" here; if it's a "placeholder", do nothing!
        if ($devices[$u] != 'placeholder') {
            echo '<td width="150px" align="middle" rowspan="' . $devices[$u]['usize'] . '">' . $devices[$u]['devicename'] . '</td>';
        }
    } else {
        echo '<td width="150px" align="middle">empty</td>';
    }
    echo "</tr>";
}

Jadi, seperti yang bisa dilihat - yang pertama metode di atas yang hanya mengulangi perangkat untuk setiap U itu membentang jauh lebih sederhana. Namun, cara kedua akan menghadirkan tampilan yang lebih user-friendly. Pilihan Anda adalah metode mana yang ingin Anda gunakan dan metode mana yang menurut Anda akan lebih dapat dipertahankan di masa mendatang.

PERBARUI (perbaikan kode &rentang multi-arah)
Saya tidak menyadari bahwa tabel Anda dibuat dalam urutan menurun, jadi saya memiliki ustartlocation sebagai "lokasi teratas" yang menyebabkan pergeseran baris/sel yang salah. Saya telah memperbaiki kode di atas untuk menetapkan "lokasi teratas" dengan benar berdasarkan ustartlocation dan usize untuk setiap perangkat yang akan memperbaiki masalah tersebut.

Atau, karena arah mungkin atau mungkin tidak penting, saya telah menyesuaikan $devices -populating loop (di bawah) untuk mendukung pembuatan row-span yang berjalan baik ke atas atau ke bawah, sepenuhnya tergantung pada bendera yang Anda tentukan. Satu-satunya kode yang perlu Anda ubah (jika Anda sudah memiliki loop tampilan yang disesuaikan dari atas) adalah while loop yang mengisi $devices :

$spanDevicesUpwards = true;
while($row = mysql_fetch_array($result_devices)) {
    if ($row['usize'] == 1) {
        $devices[$row['ustartlocation']] = $row;
    } else {
        $topLocation = ($spanDevicesUpwards ? ($row['ustartlocation'] + $row['usize'] - 1) : $row['ustartlocation']);
        $bottomLocation = ($spanDevicesUpwards ? $row['ustartlocation'] : ($row['ustartlocation'] - $row['usize'] + 1));

        $devices[$topLocation] = $row;
        for ($location = ($topLocation - 1); $location >= $bottomLocation; $location--) {
            $devices[$location] = 'placeholder';
        }
    }
}

Blok kode baru ini akan, jika usize menjangkau lebih dari 1, tentukan "sel atas" dan "sel bawah" untuk perangkat saat ini. Jika Anda membentang ke atas , sel teratas adalah ustartlocation + usize - 1; jika Anda merentang ke bawah , itu hanya ustartlocation . Lokasi bawah juga ditentukan dengan cara ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghapus angka dari string di mysql

  2. ClassNotFoundException dengan Pohon Kacang Elastis dan Tomcat 7

  3. masukkan data XML ke mysql dengan php

  4. Laravel 8 - Tidak dapat menemukan driver:Illuminate\Database\QueryException tidak dapat menemukan driver (SQL:pilih * dari `daftar`)

  5. beberapa kueri tabel yang sama tetapi di kolom yang berbeda mysql