2014-10-19 85 views
-1

我想从两个不同的数据库表中获得搜索结果。PHP搜索多个数据库

我得到的错误,我不知道为什么,这是我第一次使用UNION所以我不确定syntax是否正确,任何帮助将不胜感激。

$raw_results = mysql_query("SELECT * FROM Vectors WHERE 
    (`Name` LIKE '%".$query."%') OR 
    (`Tags` LIKE '%".$query."%') OR 
    (`Image` LIKE '%".$query."%') 
    UNION ALL SELECT * FROM Photos WHERE 
    (`photo_alt` LIKE '%".$query."%')") 

最初的错误是解析错误:语法错误,意想不到的T_IF上线98个

非常感谢

+0

你得到的错误是什么? – 2014-10-19 19:43:00

+0

这两个表的列数是否相同?对于联合,两个查询都必须返回相同数量的列。 – mrmryb 2014-10-19 19:43:40

+0

对不起,这里是错误,解析错误:语法错误,第98行的意外T_IF – Swashpro 2014-10-19 19:45:11

回答

0

你一定要能够打破东西,所以你可以弄清楚一个问题一次。

如果您使用xampp或有服务器,您可以使用phpmyadmin快速检查查询是否有效。

首先,您可能需要将查询拆分为单独测试每个select,以便您知道它们都在工作。之后,如果你仍然有问题,那很可能是你的union

Unions需要返回的列是相等的,所以如果第一select回报2列,第二个也必须返回2.

$raw_results = mysql_query("SELECT `col1a`,`col2a` FROM Vectors WHERE 
(`Name` LIKE '%".$query."%') OR 
(`Tags` LIKE '%".$query."%') OR 
(`Image` LIKE '%".$query."%') 
UNION ALL 
SELECT `col1b`,`col2b` FROM Photos WHERE 
(`photo_alt` LIKE '%".$query."%')") 

如果Vectors有3列和Photos有2列,但你想从Vectors选择在这个所有3列加入比你可以创建Photos第三列:

SELECT `col1b`,`col2b`,null FROM Photos WHERE 
(`photo_alt` LIKE '%".$query."%')") 

重要提示:停止使用mysql。它已被废弃,并且您使用它的方式特别危险,并且对sql injection开放。使用PDO

+0

确定这就是你的建议十分感谢,我会放弃这一点。谢谢 – Swashpro 2014-10-19 20:00:27

+0

太棒了,让我们知道它是怎么回事,如果这解决了你的问题,请接受它作为正确的答案。 – mrmryb 2014-10-19 20:18:35

+0

工作完美,现在从两个表中获得结果。此外,我还会看看PDO,这对我来说都是新鲜事物,我已经严格执行了3年的前端开发,这是一个完整的其他球类游戏。再次感谢 – Swashpro 2014-10-19 20:28:28