0

私のMYSQLクエリの構文で混乱しました。

これは正しいですか...それに類似したエントリがインターネットに見つかりません。

$query_game_string = '';

while($game = mysql_fetch_assoc($get_game_list)){
    $query_game_string .= ' OR target = "' . $game['id'] . '" AND ancestors = "0"';   
}

echo '' . $query_game_string . '';  

//prints: OR target = "11" AND ancestors = "0" OR target = "12" AND ancestors = "0" OR target = "27" AND ancestors = "0" OR target = "29" AND ancestors = "0" OR target = "32" AND ancestors = "0"


        $database->connect(); 

            $comments = mysql_query(
                'SELECT * 
                    FROM ' . $database->db_prefix . 'comments 
                        WHERE user_id = "' . $user->user_object["id"] . '"' .
                        $query_game_string . '                                    
                        ORDER BY created DESC'
            , $database->connection_handle);                     

        $database->close();

したがって、実際のクエリは合計で次のようになります。

'SELECT * 
    FROM ' . $database->db_prefix . 'comments 
        WHERE user_id = "' . $user->user_object["id"] . '"' .
        'OR target = "11" AND ancestors = "0" OR target = "12" AND ancestors = "0" OR target = "27" AND ancestors = "0" OR target = "29" AND ancestors = "0" OR target = "32" AND ancestors = "0"' . '                                    
        ORDER BY created DESC'

構文は大丈夫ですか?

4

1 に答える 1

0

何を探しているのか正確にはわかりませんが、おそらく括弧が必要です。

OR (target = "11" AND ancestors = "0")
OR (target = "12" AND ancestors = "0")
OR (target = "27" AND ancestors = "0")
OR (target = "29" AND ancestors = "0")
OR (target = "32" AND ancestors = "0")

それを達成するためのphp:

while($game = mysql_fetch_assoc($get_game_list))
{
    $query_game_string .= ' OR (target = "' . $game['id'] . '" AND ancestors = "0")';   
}

クエリを単純化する方法は、INオペランドを使用することです

 OR target IN("11","12","27","29","32") AND ancestors = "0"

php:

$targets = array();
while($game = mysql_fetch_assoc($get_game_list))
{
    $targets[] = '"'.$game['id'].'"';   
}
$query_game_string = ' OR target IN (' . implode(",",$targets) . ') AND ancestors = "0"';
于 2012-06-06T20:59:18.927 に答える