首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql选择具有多id的查询

Mysql选择具有多id的查询
EN

Stack Overflow用户
提问于 2013-03-16 05:47:42
回答 4查看 8.2K关注 0票数 1

好吧,我有这样一个Mysql table(oc_calendar):

代码语言:javascript
复制
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:

代码语言:javascript
复制
$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等等。

代码语言:javascript
复制
$search = mysql_query("SELECT * FROM property_step1 WHERE propertyid IN (" . 
implode(',', $search_p_id) . ")"); 

为什么要显示错误信息,知道吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-16 05:51:24

不需要使用两个查询,只需使用一个查询即可,方法是对两个表进行JOIN

代码语言:javascript
复制
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或准备好的语句代替。

票数 5
EN

Stack Overflow用户

发布于 2013-03-16 05:52:58

不能对非数组数据使用implode()。您应该将$search_p_id值的值更改为数组。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2013-03-16 05:51:41

$search_p_id目前不是一个数组,所以implode(',', $search_p_id)很可能失败。

更改设置$search_p_id的方式

代码语言:javascript
复制
while($re_search = mysql_fetch_array($search)) {
  $search_p_id[] = $re_search['username']; // here is the result Like: 18, 19 etc..
}   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15446037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档