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)
为什么它会显示错误消息,任何想法?
不需要两个查询,只需一个查询就可以通过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从第一个表中获取值列表,然后从第二个值中选择所有行,其中使用谓词从第一个表中选择propertyid的username值列表中IN.所以,我使用JOIN它就像谓词,IN但它更安全,让你从两个表中选择列.
注意:请停止使用Mysql_*扩展,这样的代码对SQL注入是开放的,它也被弃用.请改用PDO或预备语句.
| 归档时间: |
|
| 查看次数: |
6830 次 |
| 最近记录: |