具有多个id的mysql选择查询

Bab*_*med 1 php mysql sql join

好吧,我有一个像这样的Mysql表(oc_calendar):

id      start_date         username
1       2013-04-04         18
2       2013-03-31         19
3       2013-04-04         19
4       2013-04-02         19 
5       2013-04-03         18
Run Code Online (Sandbox Code Playgroud)

通过以下查询,我可以根据搜索结果获取所有ID:

$search = mysql_query("SELECT DISTINCT username FROM oc_calendar WHERE start_date 
between '$from' AND '$to'");

while($re_search = mysql_fetch_array($search)) {

$search_p_id = $re_search['username']; // here is the result Like: 18, 19 etc..
}   
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用以下查询获取基于变量$ search_p_id的另一个表(property_step1)信息,但它显示错误.可能是我的查询不正确.

注意:变量$ search_p_id可以是18或19,18等.

$search = mysql_query("SELECT * FROM property_step1 WHERE propertyid IN (" . 
implode(',', $search_p_id) . ")"); 
Run Code Online (Sandbox Code Playgroud)

为什么它会显示错误消息,任何想法?

Mah*_*mal 5

不需要两个查询,只需一个查询就可以通过JOIN两个表执行此操作:

SELECT p.* 
FROM oc_calendar AS o
INNER JOIN  property_step1 AS p ON o.username = p.propertyid
WHERE o.start_date between '$from' AND '$to';
Run Code Online (Sandbox Code Playgroud)

我假设了连接条件:o.username = p.propertyid因为您username从第一个表中获取值列表,然后从第二个值中选择所有行,其中使用谓词从第一个表中选择propertyidusername值列表中IN.所以,我使用JOIN它就像谓词,IN但它更安全,让你从两个表中选择列.


注意:停止使用Mysql_*扩展,这样的代码对SQL注入是开放的,它也被弃用.请改用PDO或预备语句.