我正在实施基于作者的图书搜索功能。我应该返回一个查询结果,其中包含查询作者编写的所有书籍。但是,对某些作者姓名的查询可能会返回多个结果(例如,“Smith,W”的查询可能与“Smith,Wesson”和“Smith,Will”匹配)。
所以,我的问题是如何“连接”这些不同作者所写的所有书籍。如果我不考虑多个作者匹配查询的可能性,我会做类似的事情(伪代码,因为我的真实代码现在非常混乱):
然而,由于有多位作者的可能性,我有类似的想法:
// 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 Framework)和MySQL中执行此操作。是否有任何函数/运算符可以让我这样做?是的,我已经尝试+=
,即使我没有期待太多,也是一个丑陋的输出。
再次,我为伪代码道歉。我会尝试清理我的代码并尽快编辑,但如果在此之前得到答案,那就太棒了。感谢。
答案 0 :(得分:2)
我同意迈克尔的看法,您似乎需要INNER JOIN
或LEFT JOIN
。
你说你正在使用Codeigniter,所以这里是一个Codeigniter特定的例子:
$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);
另见:
答案 1 :(得分:1)
您可以使用.=
进行连接。但是,更高效的是,您可以在SQL中简单地指定多个WHERE子句,因此您将拥有以下伪代码:
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
答案 2 :(得分:0)
也许你可以修改你的查询以使用LEFT JOIN。这样,您可以在一个查询中获得多个查询结果。
答案 3 :(得分:-1)
要在PHP中进行连接,请使用
.=