好吧,我有这样一个Mysql table(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..
} 现在,我试图根据变量table(property_step1) $search_p_id获取另一个带有以下查询的$search_p_id信息,但这是显示错误。可能是我的疑问不对。
注:变量$search_p_id可以是18或19,18等等。
$search = mysql_query("SELECT * FROM property_step1 WHERE propertyid IN (" .
implode(',', $search_p_id) . ")"); 为什么要显示错误信息,知道吗?
发布于 2013-03-16 05:51:24
不需要使用两个查询,只需使用一个查询即可,方法是对两个表进行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值的列表,然后从第二个值中选择使用IN谓词从第一个表中选择的username值列表中的所有行。因此,我使用了JOIN --它类似于谓词IN,但它更安全,可以从两个表中选择列。
注意:请使用Mysql_*扩展停止,您的代码以这种方式向SQL注入开放,这也是不推荐的。使用PDO或准备好的语句代替。
发布于 2013-03-16 05:52:58
不能对非数组数据使用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) . ")"); 发布于 2013-03-16 05:51:41
$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..
} https://stackoverflow.com/questions/15446037
复制相似问题