2010-11-29 105 views
1

精确匹配这里的表结构如何搜索在MySQL数据库的多个表使用PHP

table : user 
id 
name 
email 
category 

table 2 : body 
id 
uid 
height 
haircolor 

以下是我从数据库 SELECT * FROM user WHERE category='paid',并与它的工作更加规范访问数据。

我想要做的就是这样的(i..e允许复杂的搜索)

Select * FROM user WHERE category='paid' body.height='5ft', body.haircolor='red' WHERE user.id=body.uid 

我知道的说法是错误的,但我希望数据库可被搜索到,这样我可以选择染发作为红色,高度为5英尺,脚本只能返回高度为5英尺,头发颜色为红色的用户(完全匹配)

我希望你们能理解我的问题。

P.S:正如你所看到的,我已经使用了2个表格,1个存储用户信息,2个存储用户身体信息。我可以将它们整合到1中,但我想保持原样。

回答

1

实际上,您可以做一些与上面的操作非常相似的事情 - 您只需在FROM构造中使用多个表。当你想快速抽出某些东西时,这是一个很好的方法。

SELECT user.* FROM user, body 
    WHERE user.category = 'paid' 
    AND body.height = '5ft' 
    AND body.haircolor = 'red' 
    AND user.id = body.uid 

请记住要指定在这种情况下的选择 - 一切从用户。你也可以用JOIN来做到这一点,虽然我有一个恐惧症,所以倾向于使用以前的方法。

SELECT * FROM user 
    WHERE user.category = 'paid' 
    AND body.height = '5ft' 
    AND body.haircolor = 'red' 
    JOIN body ON user.id = body.uid 

这应该做的伎俩!正如我所说的,我鄙视使用JOIN,前者应该是绝对好的。

+0

这两个查询之间的区别究竟是什么? – 2010-11-29 20:26:31

2

看起来你已经有点混乱的基于使用WHERE同时为条件选择的,以及指定的两个表之间的连接。这就是为什么我宁愿保持联接明确定义,这会给你这样的查询:

SELECT user.* 
FROM user 
JOIN body ON body.uid = user.id 
WHERE body.height = '5ft' 
    AND body.haircolor = 'red'; 

所以,现在你已经分开这两个表进行连接到JOIN/ON节的一部分,并且WHERE只包括缩小搜索范围的条件。