0

「ページ」、フィールド:id、name、content、positionというテーブルがあるとしましょう。cms にすべてのページを表示するときに、「下」ボタンと「上」ボタンを配置してページ位置を設定したいと考えています。位置の更新はどのように行うのですか? 他のページの位置を変更する方法を教えてください。

例えば:

id  name  content  position
1   Home  bla bla  1
2   Info  bla bla  4

2 番目のページ (情報) の「上」をクリックすると、位置を 1 に更新する必要があり、最初のページの位置は 1 より大きくする必要があります (2 のように)。

私は MySQL データベースを使用しています。PHP のソリューションが必要です。

4

2 に答える 2

0

これを実現する1つの方法は、同じページで送信することです。たとえば、position.php

3つのレコードがある場合は、次のことを考慮してください。

John bla bla(ポジション1)
Mary bla bla(ポジション2)
George bla bla(ポジション3)

最初はこのようなリンクが必要です

    <a href="position.php?position=<?=$position?>&id=<?=$id?>">up</a>

$ positionは、上記のように要素の現在の位置であり、idはテーブルのIDです。

あなたがそのリンクをクリックすると

    $_GET['position'] and $_GET['id'] 

現在のレコードの位置とIDがあります。

だからあなたは次のことができます

 <?php
         //connect to DB

         if(isset($_GET['position']) && isset($_GET['id'])){
           $line = $_GET['position'];    
          $id = $_GET['id'];
          //if line is not the first one    
         if($line!=1){       

        $query = "select id,position from pages where position<$line order by position   desc limit 0,1";
       $result = mysql_query($query);
       $row = mysql_fetch_array($result);
       $gotoLine = $row['position'];//line to go to
       $idLine = $row['id'];
       //one position up
       $queryUpdate = "update pages set position=$gotoLine where id=$id";
       mysql_query($queryUpdate);
       //one position down
       $queryUpdate2 = "update pages set position=$line where id=$idLine";
       mysql_query($queryUpdate2);

   }     
}

   $queryLinks = "select * from pages order by position";
   $resultLinks = mysql_query($queryLinks);
   while($rowLinks = mysql_fetch_array($resultLinks)){

   $name = $rowLinks['name'];
   $id = $rowLinks['id'];
   $position = $rowLinks['position'];

   echo "$name<a href='position.php?position=$position&id=$id'> up </a><br/>";

}    


?>
于 2012-09-15T16:05:47.587 に答える
0

あなたはコードを投稿していないので、私は特定の解決策を与えることはできませんが、私はあなたに一般的な解決策を与えることができます。これは次のようになります(テストされていません)

$pageName次のように、ページの位置を減らします(名前がにあり、テーブル名がにあると仮定しますpages)。

  mysql_query("UPDATE `pages` SET position=position-1 WHERE name=$pageName");

負のランクを許可しない場合は、最初にランクが0より大きいことを確認することをお勧めします。現在のページと同じランクになっているページの位置を増やします

 mysql_query("UPDATE `pages` SET position=position+1 
        WHERE position = (SELECT position FROM `pages` WHERE name=$pageName) 
        AND NOT name=".$pageName)

もちろん、これはページランクにUNIQUE制約がないことを前提としています。ある場合は、次のようにします。

  1. 編集するページのランクを選択します(たとえば、$thisRank
  2. ランクのあるページのIDを選択します$thisRank-1。つまり、$aboveId未使用のランクに対する上記のIDを選択します。
  3. ページのランクをに設定します$thisRank-1
  4. のランクを$aboveIdに設定します$thisRank
于 2012-09-15T15:52:34.890 に答える