2012-04-04 95 views
0

我正在實現基於作者的圖書搜索功能。我應該返回一個查詢結果,其中包含查詢作者編寫的所有書籍。然而,對某些作者姓名的查詢有可能返回多個結果(例如,「Smith,W」的查詢可能與「Smith,Wesson」和「Smith,Will」匹配)。是否可以「連接」查詢結果?

所以,我的問題是如何「連接」這些不同作者寫的所有書籍。如果我不考慮多個作者匹配查詢的可能性,那麼我會採用類似的方式(以僞代碼形式,因爲我的真實代碼現在非常混亂):

  • 搜索作者作者表
  • 匹配查詢
  • 獲取作者的AUTHORID
  • 具有相同AUTHORID書中記載
  • 搜索書表

然而,隨着多個作者的可能性,我有這樣的事情在腦海:

// search author table for authors matching the query 

foreach(author_match as am){ 
    // search book table for book records with authorid=am.authorid 
    // Is there such thing as this? :\ 
    book_results += all the rows returned by previous query 
} 
return book_results; 

我在PHP(帶有CodeIgniter框架)和MySQL中這樣做。有沒有任何功能/操作符可以讓我做到這一點?是的,我試過+=,即使我對它沒有多少期待,也沒有想到會有一個醜陋的輸出。

再一次,我對僞代碼表示歉意。我會嘗試清理我的代碼並儘快編輯,但如果在此之前有答案,它就會變得非常棒。謝謝。

+0

有什麼不對的加入書和作者在查詢中? – wildplasser 2012-04-04 20:08:30

+2

我不知道Codeigniter,但你需要的查詢看起來像這樣:'SELECT author。*,book。* FROM author LEFT JOIN book ON author.authorid = book.authorid WHERE author.authorid = <你的查詢作者> ' – 2012-04-04 20:10:06

+0

我承認還沒有看過JOINS呢。將嘗試他們並稍後再報告。謝謝。 – skytreader 2012-04-04 20:13:11

回答

2

我與邁克爾同意,看來你需要或者一個INNER JOINLEFT JOIN

你說你正在使用笨所以這裏是一個笨具體的例子:

$this->db->select('author.*, 
        book.*'); 
$this->db->from('authors'); 
$this->db->join('books', 'books.authorid = authors.id', 'left'); 
$this->db->where('authors.id', $the_author_id); 

另見:

+0

找出如何在我的查詢中使用連接,但感謝CodeIgniter特定示例( - ,) – skytreader 2012-04-06 18:28:23

-1

做一個串連在PHP中,使用

.= 
+0

'+ ='是僞代碼的一部分,'。='是一個字符串連接符,對追加查詢結果極爲無用...... – 2012-04-04 20:08:05

+0

他想連接字符串。除非你有更好的方法來存儲事物的名字。 聲明一個變量,然後打開查詢結果循環和。=結果。 – 2012-04-04 20:10:25

+0

此外,我認爲'。='完全是字符串,'+ ='是for,ummm,其他所有內容,數字數據等等(顯然不是)。是的,即使在我的真實代碼中,我也嘗試過'+ ='。我想連接記錄,其中,AFAIK是指針/光標,而不是字符串。 – skytreader 2012-04-04 20:10:56

0

也許你可以修改您的查詢中使用LEFT JOIN。這樣您就可以在一個查詢中獲得多個查詢結果。

+0

嗯,MySQL將'UNION'實現爲'UNION's。 'LEFT JOIN'是一個完全不同的概念。 – 2012-04-04 20:11:18

1

您可以使用.=來連接。然而,更有效,你可以簡單地指定多個WHERE子句中的SQL,所以你必須在下面的僞代碼:

search author table for authors matching the query 
where = 'with ' 
foreach(author_match as am){ 
where += 'authorid=' . am.authorid . ' OR' } 
where = substr(where[0,strlen(where)-3) 
} 
search book table for book records [where clause here] 
return book_results 
相關問題