1

配列から最大 5 つの値を抽出し、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");

ここでの問題は、値が 5 つ未満の場合のようです。次のエラーが表示されます。

Notice: 未定義のオフセット: D:\Hosting\8847501\html\scripts\timeframes.php 行 298 の 1

注意: 未定義のオフセット: 2 の D:\Hosting\8847501\html\scripts\timeframes.php 行 299

Notice: 未定義のオフセット: D:\Hosting\8847501\html\scripts\timeframes.php 行 300 の 3

Notice: 未定義のオフセット: D:\Hosting\8847501\html\scripts\timeframes.php の 301 行目の 4

この問題を解決する方法はありますか? たぶん、変数の正確な数だけをクエリに入れますか? 道に迷いました...

4

2 に答える 2

3

を使用implodeして ID のコンマ区切りリストを作成し、この新しく作成したリストを MySQLIN式に入れることができます ( UPDATE :!=クエリで使用していることがわかったので、作成しましょう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,31array_map()それらが文字列の場合は、たとえば、最初にアポストロフィで囲む必要があります。

また、配列が空になることが予想される場合は、id NOT IN () AND必要に応じてその部分全体を省略する別の条件を追加できます。

于 2012-05-15T19:02:15.097 に答える
0

配列 $frontpage_hot_list_data[] に結果が含まれていないため、 $sql_frontpage_hot_list の結果がないようです

私は次のようにします:

$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 に答える