2011-11-11 54 views
2

私はphp + mysqlでフォトギャラリーを作ろうとしています。"centering" mysqlの結果

URL viewphoto.php?id = 143は写真143を表示します。 ナビゲーションメニューで、そのアルバムの前の2枚の写真と次の2枚を表示します。

私が使用して考える:

$temp_id = $id - 2; 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id >= {$temp_id} LIMIT 5"); 

しかし、別のアルバムからの写真の閲覧は、写真の1を前後のIDを持っている可能性があるため、それは、動作しませんでした。

私はこれをどのように行うことができますか?

ありがとうございました。

+2

"先行"と "次へ"を最初に定義する必要があります。 **あなたのデータベースは理解できます** ** –

答えて

4

と私はこの問題へのエレガントな解決策を見つけたことはありません、私は2つのクエリでそれをやってしまった:

// next 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id > {$id} ORDER BY id ASC LIMIT 2"); 

// prev 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id <= {$id} ORDER BY id DESC LIMIT 3"); 

フェッチ一度「前」の最初の項目現在の写真になります。

この解決策は、 "prev"の最初の項目が実際に要求されたIDであることを確認して修正する必要があります。なぜなら、一連のギャップがある場合には正しいIDであるかどうかを確認しないからです。

+0

これはかなり簡単です。これらの2つのクエリの間にUNIONがあれば、それはまさに私が探していたものです。ありがとう! – ONOZ

+1

ええ、組合は素敵な配列を与えるだろう!しかし、それは任意のDBサーバーを和らげるでしょうか? – zrvan

6

idを使って画像を並べ替えるのは悪い考えです。 1つの画像を削除するとします。あなたの連鎖は壊れてしまいます。これを修正するには、id列を変更する必要があります。これはさらに悪い考えです。

1つのアルバム内のソートには、別々のインデックス列を使用してください。ピクチャが削除された場合、このインデックスは簡単に再構築できます。

または、テーブル内に「前の」列と「次の列」を定義します。これには、最後と次の画像のIDが含まれます。画像が削除された場合は、前の画像と次の画像の列を変更するだけで済みます。

どちらの方法でも、ネストされた自己結合を使用して、前後の2枚の写真にアクセスできます。あなたがそれについて助けを必要とするならば、この投稿にコメントしてください。

私はこの問題に自分自身を扱ってきた
+0

ありがとう!私は余分な並べ替えの列を作っています。それはそれを行うでしょう。 – ONOZ

+3

@それ以前はあなたにぴったりのものです。画像を削除すると、何も破壊されません。手作業で指図を変更する場合にのみ、個別の項目が必要です。 –