是否可以“连接”查询结果?

时间:2012-04-04 20:05:38

标签: php mysql codeigniter

我正在实施基于作者的图书搜索功能。我应该返回一个查询结果,其中包含查询作者编写的所有书籍。但是,对某些作者姓名的查询可能会返回多个结果(例如,“Smith,W”的查询可能与“Smith,Wesson”和“Smith,Will”匹配)。

所以,我的问题是如何“连接”这些不同作者所写的所有书籍。如果我不考虑多个作者匹配查询的可能性,我会做类似的事情(伪代码,因为我的真实代码现在非常混乱):

  • 搜索作者的作者表
  • 匹配查询
  • 获取作者的作者
  • 使用相同的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 Framework)和MySQL中执行此操作。是否有任何函数/运算符可以让我这样做?是的,我已经尝试+=,即使我没有期待太多,也是一个丑陋的输出。

再次,我为伪代码道歉。我会尝试清理我的代码并尽快编辑,但如果在此之前得到答案,那就太棒了。感谢。

4 个答案:

答案 0 :(得分:2)

我同意迈克尔的看法,您似乎需要INNER JOINLEFT 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中进行连接,请使用

.=