2011-10-12 80 views
0

我想使用一个SQL查询,但我得到了多次相同的结果。Mysql加入以显示唯一的ID

我读到我必须使用INNER JOIN或LEFT JOIN来避免这种情况。唯一的问题是,我有点新手与MySQL,所以我实际上不能做一个成功的查询。

查询是这样的

SELECT * 
FROM table1,table2 
WHERE table1.name LIKE '%$str%' 
OR 
table1.last_name LIKE '%$str%' 

$str的是,我在一个PHP函数传递,以使搜索的字符串。

+2

你从'table2'需要什么样的数据?否则,我认为没有理由加入'JOIN'。备份并告诉我们你想要做什么。 –

+0

我实际上需要显示一些table2行。我在table2中有一个外键,它是table1的id。我不知道是否有另一种更好的方式来做到这一点。如果有请让我知道。 – Jackobsen

回答

0

您需要在这两个表格之间进行连接。

SELECT * 
FROM table1 
INNER JOIN table2 
    ON table1.key = table2.key 
WHERE table1.name LIKE '%$str%' 
OR 
table1.last_name LIKE '$str%' 

您还应该使用mysql_real_escape_string来防止SQL注入。

$query = "SELECT * 
FROM table1 
INNER JOIN table2 
    ON table1.key = table2.key 
WHERE table1.name LIKE '%" . mysql_real_escape_string($str) ."%' 
OR 
table1.last_name LIKE '%" . mysql_real_escape_string($str) ."%'"; 

这是关于escape string的文档。

0

你可以尝试:

SELECT DISTINCT t1,*, t2.* 
FROM table1 t1 INNER JOIN table2 t2 
ON t1.id = t2.table1_id 
WHERE 
    table1.name LIKE '%$str%' OR 
    table1.last_name LIKE '%$str%'