0

私はhttp://www.xaluan.comでプロジェクトtintucに取り組んでいます

私はこのようにシンプルにかわいらしいテーブルを2つ持っています

table articles
 ID - Title - Des - CatID
table category
 CatID - catTitle 

通常、カテゴリ テーブルでループを実行して CatID と catTile を受け取り、記事テーブルで再度ループを実行して、4 つの最新の記事がその CatID に属するようにします。

このようなウェブサイトの結果

catTitle 1 
 - lastes article belong to catID 1
 - second last artice belong to catID 1
catTitle 2
 - lastess article belong to catID 2
 - second last article belong to catID 2

カテゴリテーブルをループしてから、各 catId の記事テーブルを何度もループするのは効果的ではないと思います。

同じ結果を得るには、最も効果的なmysqlクエリを手伝ってください。

ありがとうございます。

4

2 に答える 2

1

上記の形式で結果を取得することはできませんが、このクエリを実行して結果をループし、データを上記のようにフォーマットすることができます。

SELECT c.catTitle, c.CatID, a.Title, a.ID , a.Des
FROM category c, artices a
WHERE c.CatID  = a.CatID 
ORDER BY c.CatID ASC, a.ID DESC

編集:

上位 4 つだけが必要な場合は、このクエリを使用します

SELECT c.catTitle, c.CatID, a.Title, a.ID , a.Des
FROM category c, (SELECT ID, Title, Des, CatID
FROM
(
   SELECT ID, Title, Des, CatID,
      @num := if(@CatID = `CatID`, @num + 1, 1) AS row_number,
      @CatID := `CatID` AS dummy
  FROM articles
  ORDER BY CatID, ID DESC
) AS x WHERE x.row_number <= 4) a
WHERE c.CatID  = a.CatID
ORDER BY c.CatID ASC, a.ID DESC

デモ

于 2013-09-05T05:16:14.153 に答える
0

が並べ替え基準の場合ID(並べ替える記事の日付が表示されません)、クエリは次のように記述できます。

SELECT a.* FROM articles a
WHERE (
   SELECT COUNT(b.id) FROM articles b WHERE a.id < b.id AND a.CatID = b.CatID
) < 4;

同じカテゴリに存在する新しい記事が 4 つ未満のすべての記事が表示されます。

でテストする SQLfiddle

于 2013-09-05T06:25:47.667 に答える