4

私はまだSQLのコツをつかもうとしています。filter_thread (「filter_id」および「thread_id」列を含む) テーブルとフィルター (「filter_id」および「tag」) テーブルから thread_id を引き出す 1 つのクエリを作成しました。

次に、まったく別のクエリを使用して、「thread_id」を含むスレッド テーブルの内容を見つけます。

これが最善の方法ではないことはわかっていますが、クエリを成功させることはできません。誰でも助けることができますか?

$query = "SELECT ft0.thread_id 
FROM filter f0 
INNER JOIN filter_thread ft0 ON ft0.filter_id = f0.filter_id 
WHERE f0.tag LIKE '%filter1%' 
OR f0.tag LIKE '%filter2%'"
$result = $query->result_array();
$thread = array();
foreach ($result as $thread_id)
{
   $id = $thread_id['thread_id'];
   $query = $this->db->query("SELECT * FROM thread WHERE thread_id='$id'");
   $thisRow = $query->result_array();
   array_push($thread, $thisRow[0] );
}

ありがとう!

4

3 に答える 3

8

次のように、単一のクエリで実行できます。

SELECT t.*
  FROM filter AS f0
 INNER JOIN filter_thread AS ft0
    ON ft0.filter_id = f0.filter_id
 INNER JOIN thread AS t
    ON ft0.thread_id = t.thread_id
 WHERE f0.tag LIKE '%filter1%'
    OR f0.tag LIKE '%filter2%
于 2012-04-05T17:22:22.013 に答える
1
select t.x, t.y, ... from thread t
inner join filter f on f.thread_id = t.thread_id
inner join filter_thread ft on ft.filter_id = f.filter_id
where bla bla

おそらくいくつかのグループで...?

于 2012-04-05T17:20:27.963 に答える
1

これを試して

SELECT t.*, f0.*
FROM filter f0 
INNER JOIN filter_thread ft0 ON ft0.filter_id = f0.filter_id 
INNER JOIN thread t ON t.thread_id = ft0.thread_id 
WHERE f0.tag LIKE '%filter1%' 
OR f0.tag LIKE '%filter2%'"
GROUP BY f0.filter_id
于 2012-05-08T08:18:35.543 に答える