2011-06-30 63 views
0
$results2=mysql_query(" 
SELECT * FROM searchengine 
WHERE 
    id IN (" . implode(',', $ids) . ") 
    OR id IN (" . implode(',', $ids2) . ") 
INNER JOIN keywords ON searchengine.id=keywords.id 
ORDER BY 
    (relevant-irrelevant) DESC, 
    (rating/votes) DESC, 
    report ASC, 
    LENGTH(description) DESC, 
    title ASC 
LIMIT $page, $limit 
"); 

上面的东西不起作用喜欢我认为这会,虽然循环返回布尔错误。INNER JOIN MySQL的布尔错误代码

implode函数的代码工作正常。

我的数据库是的搜索引擎关键字

的搜索引擎:ID,标题,说明...

关键字:NUM,ID,A,B

的A和B id应该被添加到searchengine(基于相同的id)来做类似(id,title,desc,a,b ...)。问我你需要更多的细节。

注意:searchengine id是唯一编号,但关键字可以多次具有相同的id(其中一个id由A和B值选取并插入为$ ids1)。

+0

你是什么意思,“while循环返回布尔错误”。虽然($ data2 = mysql_fetch_array($ results2))没有在你的SQL语句或PHP(?)代码 –

+0

中的while循环没有认为它是重要的,但它在这里,错误是这个警告:mysql_fetch_array()预计参数1是资源,在 – Arremer

+0

给出的布尔值似乎是一个比SQL问题更多的PHP然后(或两者的交互) –

回答

3
  • 移动连接下的where子句。
  • 使用表名限定id。 searchengine.id

SELECT * 
FROM searchengine 
INNER JOIN keywords ON searchengine.id=keywords.id 
WHERE 
    searchengine.id IN (" . implode(',', $ids) . ") 
    OR searchengine.id IN (" . implode(',', $ids2) . ") 
ORDER BY 
    (relevant-irrelevant) DESC, 
    (rating/votes) DESC, 
    report ASC, 
    LENGTH(description) DESC, 
    title ASC 
LIMIT $page, $limit 
+0

我在我的问题中添加注意,如果我移动到最后,我相信混乱发生在多个id-s的JOIN函数原因 – Arremer

+0

这就是为什么你需要使用表'searchengine.id' –

+0

hm在第二次查看时使用id来限定id它会使一些更加不合理的布尔错误仍然存​​在,il尝试添加更多细节。 – Arremer

0

你的WHERE子句应该是来的JOIN之后。

SELECT * 
    FROM searchengine 
     INNER JOIN keywords 
      ON searchengine.id=keywords.id 
    WHERE id IN (" . implode(',', $ids) . ") 
     OR id IN (" . implode(',', $ids2) . ") 
    ORDER BY (relevant-irrelevant) DESC, (rating/votes) DESC, report ASC, LENGTH(description) DESC, title ASC 
    LIMIT $page, $limit