2012-04-05 47 views
2

我仍然試圖獲取SQL的掛件。我構建了一個查詢,它從filter_thread(包含'filter_id'和'thread_id'列)表和一個過濾器('filter_id和'tag')表中取出thread_id's'在同一查詢中使用INNER JOIN兩次

然後,我使用完全不同的查詢來查找線程表的內容,其中包含'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]); 
} 

謝謝!

回答

5

你可以做一個單一的查詢,像這樣:

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% 
+0

效果很好。謝謝。唯一的問題是一些結果重新複製。如果他們共享在filter1和filter2中找到的重複短語,我認爲它會發生。任何想法爲什麼這可能會發生? – 2012-04-05 17:28:04

+0

不,如果您認爲不應該發生,則可能是因爲'filter_thread'表中有多個相同'thread_id'的記錄,或者'filter_id'中的多個記錄存在'filter_id'。如果預期這些重複記錄,但您不希望它們放在結果集中,則可以添加一個「DISTINCT」關鍵字以消除重複(SELECT DISTINCT t。* ...') – gonsalu 2012-04-05 17:33:56

+1

謝謝。他們是預期的,並且是我想要做的事情所必需的。 DISTINCT非常完美。愛學習新事物。 – 2012-04-05 17:37:41

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 

也許有些羣由......組成?

+0

這仍然只返回線程ID,當我把它放在 – 2012-04-05 17:28:35

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