在sql查询中连接表以进行搜索

时间:2013-07-21 00:56:45

标签: php mysql

好吧,这是一团糟,我现在迷失了。我正在尝试搜索一个可以搜索单词的网站,它将通过一个名为designs的表来搜索该表中多个列的单词。我有这个工作,直到我决定我也想要搜索另一个成员的username。在design表中,有一个名为user的列,其中与id内的users匹配。我希望这是有道理的,因为我真的不想画一张桌子..

$result = mysql_query("
SELECT designs.*, users.* 
FROM designs, users 
WHERE type LIKE '%" . mysql_real_escape_string($search1) . "%' 
OR title LIKE '%" . mysql_real_escape_string($search1) . "%' 
OR tags LIKE '%" . mysql_real_escape_string($search1) . "%' 
OR description LIKE '%" . mysql_real_escape_string($search1) . "%' 
OR users.username = " . mysql_real_escape_string($search1) . " 
ORDER BY designs.id 
DESC
");

这就是它目前的样子,$search1是用户正在搜索的内容。我希望能够通过搜索{{1}来显示用户所做的任何designsusername连接到designs.user之后的用户,但它只是不起作用,任何想法?

另外users.id在“where子句”中给出了“未知列'名称'”的错误

1 个答案:

答案 0 :(得分:1)

内部联接的查询是这样的,你必须指定像designs.<columnname>这样的表名来查询它们。

    SELECT designs.*, users.* 
    FROM designs
    INNER JOIN users on users.id = designs.user
    WHERE designs.type LIKE '%<SEARCH TEXT>%' 
    OR desings.title LIKE '%<SEARCH TEXT>%' 
    OR designs.tags LIKE '%<SEARCH TEXT>%' 
    OR designs.description LIKE '%<SEARCH TEXT>%' 
    OR users.username = '<USER ID>' 
    ORDER BY designs.id 
    DESC

简单的语法是

INNER JOIN <table name> <alias> ON <first table>.<column name> = <second table>.<column name>

巨大的问题是您使用的是mysql_* API,请这些方法非常容易不要使用它们

如果您使用其他API(如mysqli或PDO),则无需使用mysql_real_escape_string来确保查询安全。