2013-05-27 6 views
2

Я пытаюсь сделать функцию фильтра для серверов на моем сайте. Пользователи могут проверять разные параметры для категорий, для которых они хотят отфильтровать, и у меня есть запрос ajax, который возвращает серверы, удовлетворяющие их условиям. Однако моя mysql_query не работает, я думаю, что у меня может быть неправильный синтаксис.Запрос Mysql с несколькими ансами и окнами

По умолчанию каждая категория имеет возможность установить в 1. Мой текущий запрос является:

$order = "SELECT * FROM `servers` 
    WHERE `size` = '$size' or 
     1 = '$size' and 
     `type` = '$type' or 
     1 = '$type' and 
     `mode` = '$gamemode' or 
     1 = '$gamemode' and 
     `main` = '$main' or 
     1 = '$main' 
    ORDER BY $orderby 
    LIMIT 5"; 

Это не похоже, чтобы получить нужные серверы, у меня есть ошибка в моем запросе?

Спасибо!

ответ

5

При смешивании and и or в вашем запросе вы должны использовать скобки для группировки условий. Кроме того, я думаю, когда вы говорите 1 = '$ size', я думаю, вы имеете в виду `size`=1.

$order = "SELECT * FROM `servers` 
WHERE 
    (`size` = '$size' or `size` = '1') and 
    (`type` = '$type' or `type` = 1) and 
    (`mode` = '$gamemode' or `mode`= 1) and 
    (`main` = '$main' or `main` = 1) 
ORDER BY $orderby 
LIMIT 5"; 
+0

спасибо! Это решило проблему отлично. – mongy910

1

Вы должны добавить круглые скобки, потому что or и and имеют различный порядок операций и нуждается в круглые скобки, чтобы то, что вы необходимости выполнить

SELECT * FROM `servers` WHERE 
(`size` = '$size' or 1 = '$size') and 
(`type` = '$type' or 1 = '$type') and 
(`mode` = '$gamemode' or 1 = '$gamemode') and 
(`main` = '$main' or 1 = '$main') 
ORDER BY $orderby LIMIT 5 
0

Просто попробуйте поставить распорку вокруг or условий

$order = "SELECT * FROM `servers` WHERE (`size` = '$size' or 1 = '$size') and (`type` = '$type' or 1 = '$type') and (`mode` = '$gamemode' or 1 = '$gamemode') and (`main` = '$main' or 1 = '$main') ORDER BY '$orderby' LIMIT 5"; 
0

Вы должны использовать скобки для использования нескольких условий ИЛИ в запросе

как

mysql_query("SELECT * FROM servers WHERE email='$Email' AND (date='$Date_Today' OR date='$Date_Yesterday' OR date='$Date_TwoDaysAgo' OR date='$Date_ThreeDaysAgo' OR date='$Date_FourDaysAgo')"); 

вы можете изменить свое имя столбца

, а также вы можете использовать в Condtion как

mysql_query("SELECT * FROM servers WHERE email='$Email' AND date IN ('$Date_Today','$Date_Yesterday','$Date_TwoDaysAgo')"); 

PLS дайте мне знать, если я могу помочь вам больше

1
"SELECT * FROM `servers` WHERE 
`size` in ('$size', 1) and 
`type` in('$type' ,1) and 
`mode` in('$gamemode' ,1) and 
`main` in ('$main' , 1) 
ORDER BY $orderby LIMIT 5"; 
Смежные вопросы