2010-02-03 2 views
0

У меня есть MySQL таблицы:HTML таблицы: изменить порядок использования 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> 
... 
+1

непонятный вопрос – ariefbayu

ответ

0

Добавьте это к концу вашего запроса 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 закажет ваши результаты по убыванию!

+0

если ваше поле действительно называется 'order', вам нужно будет включить обратные обраты 'вокруг поля как' order' – MalphasWats

+0

hmm, посланный слишком скоро, извините. 'order' - это ключевое слово mysql, обратные метки указывают его как имя поля. – MalphasWats

+0

Нет проблем, хотя я уже добавлял котировки вокруг него. – lamas

0

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

Затем вы можете ЗАКАЗАТЬ В этом столбце в запросе SELECT.

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

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

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

-2

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

<?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

Да, только что сказал Дэвид Доорвар. Мне нужен пользовательский интерфейс для ручного заказа таблицы, а не сортировка столбца. Спасибо в любом случае – Xin

+0

Yup, я понимаю SQL-инъекцию и несколько других проблем безопасности. Но это не вопрос. из описания: существует ли способ внести изменения в «порядок» с помощью кнопок (перемещение вверх/вниз), а затем обновить порядок в базе данных ?. Он/она хочет обновить поле «заказ», а не КАК ОФОРМИТЬ свой вопрос !. – ariefbayu

+0

@ Xin: Мой ответ не о сортировке столбца. Речь идет об изменении порядка таблицы/вопроса. – ariefbayu

0

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

ORDER BY first_order,second_order,second_order` 

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

0

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