2017-10-18 19 views
-1

私はSQLを初めて使用しており、以下に示すようにテーブル結果を返すselect文に取り組んでいます。目的は、存在する各ThreadIDに対して1つの行を持つテーブルを返すことであり、クエリされたCatIDと一致するCatIDを持ち、結果をフィルタリングし/結果を制限して最新の投稿のみが返され、作成日:SQL INNER JOIN LIMIT結果ID UNIQUEと日付が最も最近のもの

日付作成された各可能な行が返される可能性のある日付を最も明確にするために作成日付を修正(Most RecentDate CatID = 1)1つのテーブルにデータが存在する場合は、明らかに私の理解を超えています。

╔══════════╔══════════╦═══════════════╦════════╦═════════════╗ 
║ CatID ║ ThreadID ║ ThreadTitle ║ PostID ║ DateCreated ║ 
╠══════════╬══════════╬═══════════════╬════════╬═════════════╣ 
║ 4  ║  7 ║ Title A ║ 12 ║ most recent ║ 
║ 4  ║  6 ║ Title B ║ 6 ║ most recent ║ 
║ 4  ║  12 ║ Title C ║ 45 ║ most recent ║ 
║ 4  ║  3 ║ Title D ║ 2 ║ most recent ║ 
╚══════════╩══════════╩═══════════════╩════════╩═════════════╝ 

私は明らかにPHPfreaks、W3Schoolsの、StackOverflowの通読とAdminerを使用して私の結果をモデル化しようとしてきました。私は前にやったことのない結合について少しは学んだことがありますが、数時間の試行(6時間)後、私は助けを求めて快適に感じます。

私の試みでは何も見つかりませんでした。結果は1つ、結果は8000+でした。私は実際のテストデータで4つの結果を得なければなりません。

これは

SELECT 
    mat.ThreadTitle, 
    mat.CatID, 

    map.DateCreated AS "RecentID", 
    map.ThreadID, 
    map.LastUpdated 


    FROM 
      ma_Threads AS mat 
    INNER JOIN 
      ma_Posts AS map 

    ON mat.CatID = '$catID' 

WHERE  `pat.DateCreated(test.marvelchampions)` = (
SELECT MAX(DATE(pat.DateCreated)) 
FROM `pat` 

望んだように動作していない私の最新の試みましSQL、です)

+2

テーブルにddlを入力してください。あなたが参加する共通の列はありますか? – Alex

+1

strtolower($ thread-> title); –

+1

SQLをデバッグするには、テーブルma_Threadsとma_Postsの定義を確認する必要があります。質問に追加してください。 – Nic3500

答えて

1

次は動作するはずです、テーブルの定義に関する私の推測が正しい

SELECT 
    ma_Threads.CatID, 
    ma_Threads.ID AS ThreadID, 
    ma_Threads.ThreadTitle, 
    ma_Posts.ID AS PostID, 
    ma_Posts.LastUpdated 

FROM ma_Threads 
JOIN ma_Posts ON (
    ma_Posts.ID = (
     SELECT MAX(ma_Posts2.ID) 
     FROM ma_Posts ma_Posts2 
     WHERE ma_Posts2.ThreadID = ma_Threads.ID 
    ) 
) 
WHERE ma_Threads.CatID = '$catID' 
ORDER BY ma_Posts.LastUpdated DESC 
+0

これは動作していません:(LastCreatedはDateAddedにする必要があります)データは2つのテーブルの形式になり、両方のテーブルにはThreadID、PostID、CatIDがあります。タイトルを取得する必要があります – Chezshire

+0

コメントを追加する - エラーが次のように表示されます: 'エラーのクエリ(1064):' WHERE ma_Threads.CatID = '1' ORDER BY ma_Postsの近くに構文エラーがあります。 DateCreated DESC '16行目 - 私はDESCなしで実行しようとしましたが、まだエラーがあります。私はLastCreatedをDateCreatedに変更しましたが、参照したいテーブルとして実行したときに残っています – Chezshire

+0

残念ながら、エラー:クエリのエラー(1054): 'フィールドリスト'の 'ma_Threads.ID'列が不明です。maを変更しようとしました。 _Threads.ThreadIDが、これは私にとってはうまくいかなかった – Chezshire

0
であると仮定すると

あなたのテーブルを見ずに言うのは難しいです。しかし、私の最高の推測は次のようになります:

SELECT mat.ThreadTitle, 
     mat.CatID, 
     map.DateCreated AS "RecentID", 
     map.ThreadID, 
     MAX(map.LastUpdated) 
FROM ma_Threads AS mat 
INNER JOIN ma_Posts AS map 
ON mat.CatID = map.CatID 
GROUP BY mat.ThreadTitle, mat.CatID, map.DateCreated, map.ThreadID 
関連する問題