2

mysqlクエリに問題があります。条件付きでmysqlの行位置を取得する方法を理解しました。私が達成したいことを説明させてください。

私はテーブルギャラリーを持っています、そしてそれはこのように見えます:

id_gallery    source   status    post
   1          img1      last     2012/12/11
   5          img2      new      2013/01/01
   7          img3      new      2013/01/01
   10         img4      last     2012/12/11
   22         img5      last     2012/12/14
   30         img6      last     2012/12/15

このクエリを使用してページ内の画像(ex:test1.php)を呼び出し、次のような結果を返します。クエリは次のとおりです。

select * from gallery where status ='last' order by post DESC

これが私の結果です:

id_gallery   source    status    post
   30         img6      last     2012/12/15 
   22         img5      last     2012/12/14
   10         img4      last     2012/12/11
    1         img1      last     2012/12/11

ページギャラリーで私はこのようなクエリを作成します:

select * from gallery order by post desc

そして次のような結果を出します:

id_gallery    source   status    post
       5          img2      new      2013/01/01
       7          img3      new      2013/01/01
       30         img6      last     2012/12/15
       22         img5      last     2012/12/14
       1          img1      last     2012/12/11
       10         img4      last     2012/12/11

私が達成したいのはこのようなものです:

      id_gallery    source   status    post      position
       5          img2      new      2013/01/01      1
       7          img3      new      2013/01/01      2
       30         img6      last     2012/12/15      3
       22         img5      last     2012/12/14      4
       1          img1      last     2012/12/11      5
       10         img4      last     2012/12/11      6

そして最終結果はこんな感じになります

          id_gallery    source   status    post      position
           30         img6      last     2012/12/15      3
           22         img5      last     2012/12/14      4
           1          img1      last     2012/12/11      5
           10         img4      last     2012/12/11      6

2ページ目(例:gallery.php)にはたくさんの画像があるので、画像の正しい位置を知りたいです。そして、最初のページ(test1.php)で、ステータスが最後の5 imgを選択し、DESCの投稿で並べ替えます。ページgallery.phpへのリンクを作成したいのですが、正しい位置が必要です。正しい位置になったら、各画像へのリンクを作成できます。これは次のようになります。

<a href='http://localhost/testing/gallery/<?=$result[position]?>.htm'><img src='http://localhost/testing/<?=$result[source]?>.jpg' /></a>

//またはhtmlでは次のようになります

<a href='http://localhost/testing/gallery/1.htm'><img src='http://localhost/testing/img6.jpg' /></a>

したがって、正しい行位置を取得できれば、ページに正しくリンクするリンクを作成できます。

誰かが私にそれを達成する方法を教えてもらえますか?私はあなたの答えに感謝します、thx前に

4

3 に答える 3

6
SELECT a.*, @row:=@row+1 AS `Position`
FROM   gallery a, (SELECT @row:=0) s
WHERE  status = 'last' 
ORDER  BY post DESC

更新 1

SELECT *
FROM
  (
    SELECT a.*, @row:=@row+1 AS `Position`
    FROM   gallery a, (SELECT @row:=0) s
    ORDER  BY case when status = 'new' then 0 else 1 END ASC,
               post DESC, id_gallery ASC
  ) a
WHERE status = 'last'
于 2013-01-03T11:08:59.133 に答える
0

最も簡単な方法は、おそらく、位置、投稿、ステータスなどの必要な列でクエリを分割し、パーティション内で並べ替えることです。分析関数が役に立ちます。ドキュメントや Web には多くの例があります。位置またはランク () の Row_Number() を追加します...:

SELECT * FROM
( 
 SELECT deptno, ename, sal
    , ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal desc) Position_Within_Dept
    , RANK () OVER (PARTITION BY deptno ORDER BY sal desc) ranks
    , DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal desc) d_ranks
   FROM emp_test
)
--WHERE rno = 3
 ORDER BY deptno, sal DESC
/

create table と insert スクリプトを投稿することは常に良い考えです。誰もあなたのためにこれをする時間はありません。

于 2013-01-03T13:46:57.137 に答える
0

PHPコードでそれを行います(SQLの一時生成テーブルに新しい行を追加する代わりに):

$query = mysql_query("YOUR QUERY");
$counter = 0;
while($rows = mysql_fetch_assoc($query)){
     $counter++;
     echo "<a...............".$counter.">.html'><img..../></a>";

}
于 2013-01-03T11:09:57.673 に答える