好吧,我有一个像这样的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
通过以下查询,我可以根据搜索结果获取所有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..
}
现在我正在尝试根据变量 $ 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) . ")");
为什么它会显示错误消息,Any Idea?
答案 0 :(得分: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';
我假设连接条件:o.username = p.propertyid
,因为您从第一个表中获取username
值列表,然后从第二个值中选择列表中propertyid
的所有行。使用username
谓词从第一个表中选择的IN
个值。所以,我使用JOIN
它就像谓词IN
,但它更安全,让你从两个表中选择列。
请注意:请使用Mysql_
*扩展程序 停止 ,您的代码以{{3}开放},它也被弃用了。请改用SQL Injection或预备语句。
答案 1 :(得分:2)
您不能将implode()
用于非数组数据。您应该将$search_p_id
值的值更改为数组。
$search = mysql_query("SELECT DISTINCT username FROM oc_calendar WHERE start_date between '$from' AND '$to'");
$search_p_id = array();
while($re_search = mysql_fetch_array($search)) {
$search_p_id []= $re_search['username']; // here is the result Like: 18, 19 etc..
}
$search = mysql_query("SELECT * FROM property_step1 WHERE propertyid IN (" . implode(',', $search_p_id) . ")");
答案 2 :(得分:1)
$search_p_id
目前不是数组,因此implode(',', $search_p_id)
最有可能失败。
更改您设置$search_p_id
while($re_search = mysql_fetch_array($search)) {
$search_p_id[] = $re_search['username']; // here is the result Like: 18, 19 etc..
}
答案 3 :(得分:1)
你首先使用弃用mysql api,切换到pdo,就像Mahmoud所说。
其次,你在非数组上使用$ search_p_id上的implode函数,这可能会给你带来不良结果。请尝试以下方法:
$search = mysql_query("SELECT DISTINCT username FROM oc_calendar WHERE start_date
between '$from' AND '$to'");
$search_p_id = array();
while($re_search = mysql_fetch_array($search)) {
array_push($search_p_id, $re_search['username']);
}
search = mysql_query("SELECT * FROM property_step1 WHERE propertyid IN (" .
implode(',', $search_p_id) . ")");