1

我想从一个数组中提取最多五个值并将它们放在一个 msql 查询中,如下所示:

$frontpage_hot_list_data = array(); 

while (@$row = mysql_fetch_array($sql_frontpage_hot_list)) {
    $frontpage_hot_list_data[] = $row['id']; 
}

$sql_frontpage_hot_down = mysql_query("SELECT * FROM submissions WHERE 
id !='$frontpage_hot_list_data[0]' AND id !='$frontpage_hot_list_data[1]' AND
id !='$frontpage_hot_list_data[2]' AND id !='$frontpage_hot_list_data[3]' AND 
id !='$frontpage_hot_list_data[4]' AND thumbnail_large=0 AND popular=1 AND 
popular_datetime > '$frontpage_hot_hot_three_onlineNowTm' AND 
views > '$frontpage_hot_hot_three_views' ORDER BY views DESC LIMIT 4");

这里的问题似乎是当我的值少于五个时,我收到以下错误:

注意:未定义的偏移量:D:\Hosting\8847501\html\scripts\timeframes.php 第 298 行中的 1

注意:未定义的偏移量:D:\Hosting\8847501\html\scripts\timeframes.php 第 299 行中的 2

注意:未定义的偏移量:3 在 D:\Hosting\8847501\html\scripts\timeframes.php 第 300 行

注意:未定义的偏移量:第 301 行 D:\Hosting\8847501\html\scripts\timeframes.php 中的 4

知道如何解决这个问题吗?也许只在查询中放置确切数量的变量?我迷路了...

4

2 回答 2

3

您可以使用implode创建一个逗号分隔的 ID 列表,然后将这个新创建的列表放入 MySQLIN表达式中(更新:现在我看到您!=在查询中使用了,所以让我们来吧NOT IN)。

$list = implode(',', $frontpage_hot_list_data);
$sql_frontpage_hot_down = mysql_query("SELECT * FROM submissions WHERE 
id NOT IN ($list) AND thumbnail_large=0 AND popular=1 AND 
popular_datetime > '$frontpage_hot_hot_three_onlineNowTm' AND 
views > '$frontpage_hot_hot_three_views' ORDER BY views DESC LIMIT 4");

重要说明:我在这里假设您的 id 是数字,因此implode()会产生类似1,5,133,31. 如果它们是字符串,那么您必须首先使用array_map()例如将它们包装在撇号中。

此外,如果您希望数组可以为空,您可以添加另一个条件,id NOT IN () AND在必要时省略整个部分。

于 2012-05-15T19:02:15.097 回答
0

似乎没有 $sql_frontpage_hot_list 结果,因为数组 $frontpage_hot_list_data[] 不包含任何结果

我会做以下事情:

$frontpage_hot_list_data = array(); 

while (@$row = mysql_fetch_array($sql_frontpage_hot_list)) {
    $frontpage_hot_list_data[] = $row['id']; 
}

if(count($frontpage_hot_list_data)) 
{
    $frontpage_ids_str = implode($frontpage_hot_list_data, ',');
    $sql_frontpage_hot_down = mysql_query("SELECT * FROM submissions WHERE 
           id not in (".$frontpage_ids_str.") AND thumbnail_large=0 AND popular=1 AND 
           popular_datetime > '$frontpage_hot_hot_three_onlineNowTm' AND 
           views > '$frontpage_hot_hot_three_views' ORDER BY views DESC LIMIT 4");
}
else
{  
    $sql_frontpage_hot_down = mysql_query("SELECT * FROM submissions WHERE
           thumbnail_large=0 AND popular=1 AND 
           popular_datetime > '$frontpage_hot_hot_three_onlineNowTm' AND 
           views > '$frontpage_hot_hot_three_views' ORDER BY views DESC LIMIT 4");
}

因此,如果我们有 $frontpage_hot_list_data 我们将它们排除在外,否则我们将忽略它们。

于 2012-05-15T19:05:50.237 回答