0

私はジュニア PHP/MySQL 開発者で、助けが必要です。バックエンドを介してテキスト フィールドを使用してカスタム ソートでフロントエンド メニュー項目を表示するにはどうすればよいですか。ページ (メニュー タイトル) を 1,2,3 のような番号でソートしたいです。 ..等。フロントエンドで。あなたの答えからもドロップダウンメニューの並べ替えを理解できればもっと良いでしょう。:D とにかく、これが私のバックエンドコードですが、機能していません。よく理解していない配列が必要だと思います:

<form name="sort_form" method="post" action="" >
<?php while($row = mysql_fetch_assoc($res)) { ?>
<tr>
    <input type="hidden" value="<?php echo $row['id']; ?>" name="id" />
    <td><input type="text" value="<?php echo $row['sort_by']; ?>" name="sort_by" size="2" maxlength="2"/></td>
    <td><?php echo $row['page_title']; ?></td>
</tr>
    <?php } ?>
<tr>
    <td colspan="2" align="center"><input type="submit" name="submit" value="Sort" /></td>
</tr>
</form>

アクションが実行されるときのコードは次のとおりです。

<?php
if(isset($_POST['submit']) == "Sort") {

    $id = intval($_POST['id']);
    $sort_by = intval($_POST['sort_by']);

    $query_update = "UPDATE `pages` SET `sort_by`='$sort_by' WHERE `id`='$id'";
    $updated = mysql_query($query_update) or die ("Update failed!");

    echo "Updated Successfuly!";

}
?>

ご理解いただければ幸いです。

ありがとう

4

1 に答える 1

1

リストをソートするには、sort_by フィールドを更新するだけではできません。

テーブルに次のデータがある場合

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         3

sort_by の値を 1 にして行 3 を更新するとどうなるでしょうか? sort_by の値が 1 の行が 2 つある場合、どちらが先ですか? sort_by 値 1 で行 2 を再度更新するとどうなるでしょうか... sort_by フィールドで多くの競合が発生する可能性があります。

ただし、これを回避するにはいくつかの方法があります。1 つは、単純に sort_by 値を交換することです。したがって、行 3 を sort_by 値 1 に更新すると、1 の sort_by 値が存在するかどうかも確認し、存在する場合は行 3 の sort_by 値に置き換えます。

スワップが探している動作でない場合は、sort_by フィールドに float データ型を指定できます。この場合、テーブル内で何かを挿入または移動するたびに、その sort_by フィールドは、間に挟まれた 2 つの行の平均になります。行 1 と行 2 の間で行 3 を移動する場合は、行 3 の sort_by 値を 1.5 に設定します。

id  page_title  sort_by
1   title_1         1
2   title_2         2
3   title_3         1.5

次に、2 を 1 と 3 の間に戻したい場合は、2 の sort_by 値を 1.25 に設定します。

id  page_title  sort_by
1   title_1         1
2   title_2         1.25
3   title_3         1.5

これを非常に長い間続けることができます。ただし、テキスト フィールドを使用して並べ替えフィールドを編集しているため、これは適切な選択ではないようです。

私が提案するのは、テーブルに「sort_by_updated_at」という別の列を作成することです。sort_by 値を更新するたびに、sort_by_updated_at を現在の時刻に設定します。このようにして、2 つの列で並べ替えることができます。通常の sort_by フィールドで並べ替えますが、衝突がある場合は sort_by_updated_at フィールドを調べ、より低い sort_by_updated_at 値を持つ行が他のすべての行より優先されます。

于 2012-08-11T00:33:31.777 に答える