2010-02-03 8 views
0

J'ai une table MySQL:table HTML: modifier commande en utilisant MySQL

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

Lors de l'affichage des données dans un tableau HTML, l'ordre des données est triée par colonne « ordre ». Comment mettre en œuvre une colonne d'ordre d'incrémentation/décrémentation en utilisant une sorte de bouton haut/bas dans chaque rangée de table?

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

question non claire – ariefbayu

Répondre

0

Ajoutez ceci à la fin de votre requête MySQL "(REST OF OLD QUERY HERE) ORDER BY order " . $sort;

Vous aurez besoin de faire des liens étiquetés haut/bas (ou quelque chose de similaire sans doute) qui passent un argument à votre script de quelle manière de trier vos résultats.

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

Ensuite, dans votre script PHP, avant que la requête:

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

Explication:

commandes MySQL vos résultats par ordre croissant par défaut, donc nous devons ajouter rien à la requête normalement ($sort='';). Toutefois, si l'utilisateur clique sur le lien décroissant, PHP définit $sort à DESC et MySQL ordonnera vos résultats décroissants!

+0

si votre champ est réellement appelé 'order', vous aurez besoin d'inclure backticks' autour du champ comme 'order' – MalphasWats

+0

hmm, envoyé trop tôt, désolé. 'order' est un mot clé mysql, les guillemets le marquent comme un nom de champ. – MalphasWats

+0

Pas de problème, je pense à propos de l'ajout de citations autour de lui aussi avant. – lamas

0

Si vous souhaitez une commande manuelle, vous devez ajouter une colonne à la base de données pour décrire cet ordre. Eventuellement une colonne entière avec une contrainte d'unicité (vous semblez l'avoir déjà, sans la contrainte).

Vous pouvez ensuite ORDER BY cette colonne dans la requête SELECT que vous émettez.

Lorsque vous souhaitez modifier l'ordre, vous devez permuter les valeurs des lignes que vous souhaitez échanger. (Vous devrez probablement définir une valeur d'espace réservé, puis l'autre à l'ancienne valeur du premier, puis la première à l'ancienne valeur de la seconde). Cela peut être réalisé avec un formulaire pour chaque ligne contenant une entrée cachée avec un identifiant de ligne, et des boutons d'envoi haut/bas. Ensuite, dans le code côté serveur, vous pouvez échanger l'identifiant de ligne avec l'identifiant de ligne + 1 ou -1 selon le bouton sur lequel vous avez cliqué.

Vous pouvez ajouter des techniques JavaScript (et Ajax) pour améliorer l'expérience utilisateur.

-2

Cet extrait devrait faire l'affaire. Toute question, lancez-la pour commenter.

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

Oui, juste ce que David Dorward a dit. J'ai besoin d'une interface utilisateur pour commander manuellement une table et ne pas trier une colonne. Merci quand même – Xin

+0

Ouais, je me rends compte du problème d'injection SQL et de plusieurs autres problèmes de sécurité. Mais, ce n'est pas la question ici. à partir de la description: existe-t-il un moyen d'effectuer des changements dans la 'commande' en utilisant les boutons (en haut/en bas) puis de mettre à jour la commande dans la base de données? Il/elle veut mettre à jour le champ «commande» pas comment commander sa question! – ariefbayu

+0

@Xin: Ma réponse ne concerne pas le tri de la colonne. Il s'agit de changer l'ordre de la table/question. – ariefbayu

0

Vous pouvez définir dans votre requête dans la section ORDER BY comme:

ORDER BY first_order,second_order,second_order` 

MAIS! Si vous voulez avoir quelque chose comme des boutons sur vos tables que vous pouvez avoir un tri dynamique dans vos tableaux vous pouvez utiliser certains plugins JQUERY vous pouvez consulter ici: http://tablesorter.com/docs/

Questions connexes