0

奇妙な/危険な/非動的な方法で接続したい2つのテーブルがあります。これらのテーブルを制御することはできません。イベント IDを含むがカテゴリ IDを含まない 1 つのテーブルから概要を取得しようとしていますが、別のテーブルを参照して、そのイベントがそのカテゴリに含まれていることを確認する必要があります。このテーブルには、イベント ID猫 IDの両方が含まれています。私は彼らに参加しようとしていますが、何も返されません。

これが危険であることはわかっていますが、カテゴリも制御できるので、指定しない限りカテゴリ ID が変更されないこともわかっています。自動インクリメントなので、私のカテゴリは 1、2、3 になります。

私のテーブルの要点

*events_vevent*

 - ev_id 
 - catid

 ---

*events_vevdetail*

 - evdet_id
 - summary

マイコード

$data = array();
for($i = 0; $i < 3; $i++){
    $summary = array();
    $query_summary = mysql_query("SELECT events_vevdetail.summary FROM 
                     events_vevdetail, events_vevent 
                     WHERE 'events_vevent.evdet_id = $i' LIMIT 5") 
    or die(mysql_error());

    while(($row = mysql_fetch_array($query_summary)))
        $summary[] = $row[0];

    switch($i){
        case 0:
            $data['cat1'] = $summary;
            break;
        case 1:
            $data['cat2'] = $summary;
            break;
        case 2:
            $data['cat3'] = $summary;
            break;
    }
}

echo json_encode($data);

説明

だから私がやろうとしていることは次のとおりです: カテゴリ 1 の ID は常に 0 であることを知っているので、最新の 5 つの投稿を取得したいのですが、カテゴリ ID 0 の投稿のみを取得します。cateogry2 と 3 についても同じです。空の配列を取得しています。2 つの mysql クエリ (テーブルごとに 1 つ) が必要なように感じて比較しますが、100% 確信があるわけではなく、長い道のりよりも正しい方法でこれを実行したいと考えています。

tl;dr私のMYSQLは正しいですか?

4

1 に答える 1

3

このクエリは、各カテゴリから上位 5 つのレコードを返します。

SELECT e1 . *
FROM events_vevent e1
LEFT OUTER JOIN events_vevent e2 ON 
( e1.catid = e2.catid AND e1.ev_id < e2.ev_id )
GROUP BY e1.ev_id
HAVING COUNT( * ) < 5
ORDER BY catid, ev_id DESC
于 2012-05-09T05:32:27.983 に答える