HTML таблица: измените порядок, используя mysql - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть таблица MySQL:

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

При отображении данных в таблице HTML, порядок данных сортируется по столбцу «порядок». Как реализовать столбец увеличения / уменьшения порядка, используя какие-либо кнопки вверх / вниз в каждой строке таблицы?

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

0 голосов
/ 01 июля 2013

Вы можете использовать jQuery + jQuery UI Sortable вместо столбца заказа. Смотрите здесь: http://jqueryui.com/sortable

0 голосов
/ 08 мая 2013

Вы можете определить его в своем запросе в разделе ORDER BY, например:

ORDER BY first_order,second_order,second_order`

НО! Если вы хотите, чтобы на ваших таблицах было что-то наподобие кнопок, которые вы можете динамически сортировать в своих таблицах, вы можете использовать некоторые JQUERY плагинов , которые вы можете использовать здесь: http://tablesorter.com/docs/

0 голосов
/ 03 февраля 2010

Если вы хотите заказать вручную, вам нужно будет добавить столбец в базу данных, чтобы описать этот порядок. Возможно, целочисленный столбец с ограничением уникальности (кажется, что оно уже есть, без ограничения).

Затем вы можете ЗАКАЗАТЬ ПО этому столбцу в запросе SELECT, который вы выполняете.

Когда вы хотите изменить порядок, вам нужно поменять местами значения строк, которые вы хотите поменять местами. (Вам, вероятно, понадобится установить одно значение заполнителя, затем другое - старое значение первого, затем первое - старое значение второго).

Это может быть достигнуто с помощью формы для каждой строки, содержащей скрытый ввод с идентификатором строки и кнопки отправки вверх / вниз. Затем в коде на стороне сервера вы можете поменять идентификатор строки на идентификатор строки + 1 или -1 в зависимости от того, какая кнопка была нажата.

Вы можете добавить JavaScript (и методы Ajax) для улучшения взаимодействия с пользователем.

0 голосов
/ 03 февраля 2010

Этот фрагмент должен к хитрости.Любой вопрос, киньте его в комментарий.

<?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>";
?>
0 голосов
/ 03 февраля 2010

Добавьте это в конец вашего запроса MySQL "(REST OF OLD QUERY HERE) ORDER BY order " . $sort;

Вам нужно будет сделать ссылки, помеченные вверх / вниз (или что-то похожее), которые передают аргумент вашему сценарию, каким образом сортировать результаты.

Например: <a href="index.php?sort=>Ascending</a> <a href="index.php?sort=desc>Descending</a>

Затем в вашем PHP-скрипте перед запросом:

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

Пояснение:

MySQL упорядочивает ваши результаты по возрастанию по умолчанию, поэтому нам обычно ничего не нужно добавлять к запросу ($sort='';). Однако, если пользователь щелкает ссылку Descending , PHP устанавливает $sort на DESC и MySQL упорядочит ваши результаты по убыванию!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...