如何将数组值添加到MySQL查询?

时间:2011-04-06 00:09:34

标签: php mysql arrays

我正在使用以下代码将MySQL查询分类为时间/日期:

mysql_select_db("user_live_now", $con);

$result = mysql_query("SELECT * FROM users_newest_post ORDER BY users_date_post DESC");

while($row = mysql_fetch_array($result))
  {
      print($row['user']);
  }

而不是让PHP运行并显示表中的所有值,我可以让它显示数组中的值吗?

4 个答案:

答案 0 :(得分:1)

那么,您想要在SQL查询中找到特定用户返回吗?以编程方式构建查询:

$users = array('User1','John','Pete Allport','etc');

$sql = "SELECT * FROM `users_newest_post` WHERE ";
$i = 1;
foreach($users as $user)
{
    $sql .= "`username` = '$user'";
    if($i != count($users))
    {
         $sql .= " OR ";
    }
    $i++;
}
$sql .= " ORDER BY `users_date_post` DESC";
$result = mysql_query($sql);

哪个会为您提供如下查询:

SELECT * FROM `users_newest_post` 
WHERE `username` = 'User1' 
OR `username` = 'John' 
OR `username` = 'Pete Allport' 
OR `username` = 'etc' 
ORDER BY `users_date_post` 
DESC

所以,你想找到某个日期或两个日期之间的所有帖子,有点难以在不知道表格结构的情况下进行,但是你可以这样做:

//Here's how to find all posts for a single date for all users
$date = date('Y-m-d',$timestamp);  
//You'd pull the timestamp/date in from a form on another page or where ever
//Like a calendar with links on the days which have posts and pass the day 
//selected through $_GET like page.php?date=1302115769
//timestamps are in UNIX timestamp format, such as you'd get from time() or strtotime()
//Note that, without a timestamp parameter passed to date() it uses the current time() instead

$sql = "SELECT * FROM `posts` WHERE `users_date_post` = '$date'"
$results = mysql_query($sql);
while($row = mysql_fetch_assoc($results))
{
    echo $row['post_name'] . $row['users_date_post']; //output something from the posts
}

//Here's how to find all posts for a range of dates
$startdate = date('Y-m-d',$starttimestamp);
$enddate = date('Y-m-d',$endtimestamp);
//Yet again, date ranges need to be pulled in from somewhere, like $_GET or a POSTed form.
//Can also just pull in a formatted date rather than a timestamp and use it straight up instead, rather than going through date()
$sql = "SELECT * FROM `posts` WHERE `users_date_post` BETWEEN '$startdate' AND '$enddate'";

//could also do:
//"SELECT * FROM `posts` WHERE `users_date_post` > '$startdate' AND `users_date_post` < '$endate'"

$results = mysql_query($sql);
while($row = mysql_fetch_assoc($results))
{
    //output data
}

要查找特定用户的帖子,您可以将语句修改为:

$userid = 5;  //Pulled in from form or $_GET or whatever
"SELECT * FROM `posts` WHERE `users_date_post` > '$startdate' AND `users_date_post` < '$enddate' AND `userid` = $userid"

答案 1 :(得分:0)

要将结果转储到数组中,请执行以下操作:

mysql_select_db("user_live_now", $con);

$result = mysql_query("SELECT * FROM users_newest_post ORDER BY users_date_post DESC");

while($row=mysql_fetch_assoc($result))
{
    $newarray[]=$row
} 

答案 2 :(得分:0)

您可能想要做的是:

$users = array("Pete", "Jon", "Steffi"); 

$users = array_map("mysql_real_escape_string", $users);
$users = implode(",", $users);

..("SELECT * FROM users_newest_post WHERE FIND_IN_SET(user, '$users')");

FIND_IN_SET函数对于此目的而言效率很低。但是,如果确实需要,你可以转换到IN子句,然后输入更多内容。

答案 3 :(得分:0)

$sql = 'SELECT * FROM `users_newest_post` WHERE username IN (' . implode(',', $users) . ')';