HTML tablo: mysql kullanarak sırasını değiştirin

5 Cevap php

Ben bir MySQL tablo var:

CREATE TABLE `Questions` (
  `question_id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  `question` VARCHAR(1024),
  `order` INT
);

Bir HTML tablosunda verileri görüntülerken, verilerin düzeni sütun 'düzen' göre sıralanır. Nasıl bir tablo her satırda yukarı / aşağı düğmeleri çeşit kullanarak sipariş sütunu arttırılması / azaltılması uygulamak istiyorsunuz?

...
  <tr>
    <td><?php echo $question['question_id'] ?></td>
    <td><?php echo $question['order'] ?></td>
    <td><button id="up_<?php echo $question['question_id'] ?>">&#x25B2;</button></td>
    <td><button id="down_<?php echo $question['question_id'] ?>">&#x25BC;</button></td>
    <td><?php echo $question['question'] ?></td>
  </tr>
...

5 Cevap

MySQL sorgunun sonuna ekleyin "(REST OF OLD QUERY HERE) ORDER BY order " . $sort;

Eğer sonuçları sıralamak için komut hangi yolu için bir argüman yukarı / aşağı (veya benzer muhtemelen bir şey) etiketli bağlantı yapmak gerekir.

Örn: <a href="index.php?sort=>Ascending</a> <a href="index.php?sort=desc>Descending</a>

Sonra, PHP komut, sorgudan önce:

$sort = ''; // Default order ascending (auto)
if ( isset ( $_GET [ 'sort' ] ) )
{
   if ( $_GET [ 'sort' ] == 'desc' )
   {
      $sort = 'DESC';
   }
}

Explanation:

MySQL siparişler sonuçlar varsayılan olarak artan, bu yüzden normalde sorguya şey eklemek zorunda ($sort='';). Ancak, kullanıcı DESC için Descending linki, PHP setleri $sort tıklar ve MySQL sonuçlarınız azalan sipariş eğer!

Bir el düzen istiyorsanız, o zaman bu emri açıklamak için veritabanına bir sütun eklemek gerekir. Muhtemelen bir teklik kısıtlaması ile bir tamsayı sütun (sen sans zaten kısıtlaması olduğunu var görünüyor).

Daha sonra SELECT sorgudaki o sütundaki İLE SİPARİŞ size verebilir.

Eğer sırasını değiştirmek istiyorsanız, size takas etmek istediğiniz satır değerlerini takas gerekir. (Muhtemelen ikinci eski değerine sonra ilk, ilk eski değerine ardından diğer bir tutucu değerine bir ayarlamak gerekir).

Bu bir satır kimliği ile gizli bir giriş içeren her satır için bir form ile elde ve yukarı / aşağı tuşlarını teslim edilebilir. Ardından sunucu tarafı kodu size satır + 1 id veya -1 butonu tıklandığında hangi bağlı olan satır id takas olabilir.

Siz kullanıcı deneyimini geliştirmek için JavaScript (ve Ajax teknikleri) ekleyebilirsiniz.

Sen gibi ORDER BY bölümünde sorguda tanımlayabilirsiniz:

ORDER BY first_order,second_order,second_order`

Eğer tabloları dinamik bir sıralama olabilir hangi masalarda düğmeleri gibi bir şey olmasını istiyorsanız BUT! bazı kullanabilirsiniz JQUERY plugins buradan bakabilirsiniz: {[(2) }]

JQuery + jQuery UI sıralanabilir yerine bir düzen sütun kullanabilirsiniz. Buraya bakın: http://jqueryui.com/sortable

Bu pasajı kandırmak için gerekir. Herhangi bir soru, yorum yapmak için onu atmak.

<?php

mysql_connect('localhost', 'xxxxxx', 'xxxxxxxxxxxx');

if(isset($_GET['q'])){
  $qid = $_GET['q'];
  $act = $_GET['act'];
  $sql = "SELECT `order` FROM test.questions WHERE question_id = '$qid'";
  $rs = mysql_query($sql);
  $r = mysql_fetch_array($rs);
  $order = $r['order'];
  if($act == 'up'){
    if($order == '1') break;
    $up_order = $order - 1;
    $sql = "SELECT question_id FROM test.questions WHERE `order` = '$up_order'";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $up_order_id = $r['question_id'];
    $sql = "UPDATE test.questions SET `order` = '$up_order' WHERE question_id = '$qid'";
    mysql_query($sql);
    $sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$up_order_id'";
    mysql_query($sql);
  } else if($act == 'down'){
    $sql = "SELECT MAX(`order`) as `order` FROM test.questions";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $max_order = $r['order'];
    if($order == $max_order) break;
    $down_order = $order + 1;
    $sql = "SELECT question_id FROM test.questions WHERE `order` = '$down_order'";
    $rs = mysql_query($sql);
    $r = mysql_fetch_array($rs);
    $down_order_id = $r['question_id'];
    $sql = "UPDATE test.questions SET `order` = '$down_order' WHERE question_id = '$qid'";
    mysql_query($sql);
    $sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$down_order_id'";
    mysql_query($sql);
  }
  $sql = "";
}

$sql = "SELECT * FROM test.questions ORDER BY `order`;";
$rs = mysql_query($sql);
echo "<table>";
while(false !== ($r = mysql_fetch_array($rs))){
   echo "<tr>";
      echo "<td>$r[question_id]</td>";
      echo "<td>$r[question]</td>";
      echo "<td>$r[order]</td>";
      echo "<td><a href='?q=$r[question_id]&act=up'>UP</a> - <a href='?q=$r[question_id]&act=down'>DOWN</a></td>";
   echo "</tr>";
}
echo "</table>";
?>