2010-10-27 111 views
0

我正在使用php和mysql使用多个表中的多个变量搜索mysql

您好,我有一些关于书籍信息的表格。

一个表是这样的

ID,BOOKTITLE,BookText

另一种是像这样

ID,BOOKID,amountofsales

我想搜索这本书的文字,以及来自一个表格的书名,但也能够包括来自另一个表格的数量销售额以给出可能的偏差。因此,例如,如果第1册的销售额为5万,并且匹配搜索“石油”,而第2册的销售额为23,000,而匹配“石油”的书1则略有相关。

但是,这应该只是一个小偏见,因为如果一个人匹配石油多,那么这仍然应该是最好的结果。

任何想法?

+1

如果一本书“T ** oil ** et Jokes”出售5百万份拷贝和“** Oil **百科全书”销售10000,会发生什么?即使不是石油,你想要第一个赢吗?像Mark说的那样^ – 2010-10-27 18:33:40

+0

。一个可能的解决方案是最初命令'REGEXP'[[:<:]]oil[[:>:]]'DESC'(尽管你可以/应该让WHERE子句尽可能简单,以便在那里得到部分结果)。或者当然也可以选择通常的和更合适的“FULLTEXT”指数匹配分数。 – Wrikken 2010-10-27 23:38:14

+0

是的,这是我所担心的。本书的长度也可能成为未来的指标。所以我想能够给这些东西一个百分比值。因此,提出石油的结果,然后以最佳结果排序,考虑销售额的5%偏差,以及书本大小的5%偏差。 – mdubulous 2010-10-28 18:28:16

回答

0

您可以通过概述MySQL查询如下涉及两个表中的两个元:

SELECT B.bookTitle,B.bookText,S.amountOfSales从书B,销售S其中S.id = B.id ORDER BY S.amountOfSale DESC;

这将验证id的匹配(意味着不同的表是相关的,因为id是相同的),并且拉出所有相关数据。那么你只需要解释数据。

尽管要注意通配符搜索,但它们可以提取很多不相关的数据,比如说一本关于铝箔的书可能会在油之前拉起来。

1

你必须做你的表的一些加盟:

$searchQuery = "oil"; 

$sql = "SELECT a.bookTitle, a.BookText, b.amountofsales FROM table1 a, table2 b WHERE a.id = b.bookid AND (a.bookTitle LIKE '%".$searchQuery."%' OR a.BookText LIKE '%".$searchQuery."%') SORT BY b.amountofsales DESC"; 

$result = mysql_query($sql); 
while($obj = mysql_fetch_object($result)) 
{ 
    echo $obj->bookTitle." has been sold ".obj->amountofsales." times and is relevant to your search"; 
} 

请在我没有测试上面的代码头脑,但它可能给你一个想法。