2015-01-02 3 views
-2

Я вижу странный вопрос с MySQL запроса У меня есть эта таблицаЗапрос возврата пустой набор

+--------------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+--------------+------------------+------+-----+---------+-------+ 
| aid   | varchar(50)  | NO | PRI | NULL |  | 
| sid   | int(10) unsigned | NO | PRI | NULL |  | 
| cid   | int(10) unsigned | NO | PRI | NULL |  | 
| signature | int(10) unsigned | NO |  | NULL |  | 
| sig_name  | varchar(255)  | YES |  | NULL |  | 
| sig_class_id | int(10) unsigned | YES |  | NULL |  | 
| sig_priority | int(10) unsigned | YES |  | NULL |  | 
| timestamp | datetime   | NO |  | NULL |  | 
| ip_src  | int(10) unsigned | YES |  | NULL |  | 
| ip_dst  | int(10) unsigned | YES |  | NULL |  | 
| ip_proto  | int(11)   | YES |  | NULL |  | 
| layer4_sport | int(10) unsigned | YES |  | NULL |  | 
| layer4_dport | int(10) unsigned | YES |  | NULL |  | 
| isp   | varchar(16)  | YES |  | NULL |  | 
| ispdst  | varchar(16)  | YES |  | NULL |  | 
+--------------+------------------+------+-----+---------+-------+ 

Когда я исполняю

SELECT DISTINCT timestamp 
     , aid 
     , sig_name 
     , inet_ntoa(ip_src) 
     , inet_ntoa(ip_dst) 
FROM acid_event 
WHERE ip_src !=0 
    AND ip_dst !=0 
    AND 1=1 
    AND aid = '10.10.10.94' 
    AND ip_src = '3305661330' 
GROUP BY aid 
     , ip_src 
     , ip_dst 
     , timestamp 
     , sig_name 
     , isp 
ORDER BY timestamp DESC 
LIMIT 0,25; 

результаты MySQL возвратные и все в порядке, но когда я изменить мой запрос к

SELECT DISTINCT timestamp 
    , aid 
    , sig_name 
    , inet_ntoa(ip_src) 
    , inet_ntoa(ip_dst) 
FROM acid_event 
WHERE ip_src !=0 
    AND ip_dst !=0 
    AND 1=1 
    AND ip_src = '3305661330' 
GROUP BY aid 
     , ip_src 
     , ip_dst 
     , timestamp 
     , sig_name 
     , isp 
ORDER BY timestamp DESC 
LIMIT 0,25; 

MySQL Retun пустой набор

+5

'ip_dst! = 0 AND 1 = 1' Что это значит в вашем запросе? –

+0

Я использую это утверждение на php для исключения ip adresse = 0 и 1 = 1 всегда верно. У меня есть таблица фильтров в моем php, поэтому я использую 1 = 1 – jarmouz

+0

У вас есть полный текстовый индекс на помощь? Если это так, проверьте эту ссылку: http://dba.stackexchange.com/questions/19661/less-restrictive-query-return-less-result-due-to-simple-removing-one-additional. Взгляните на ответ RolandoMySQLDBA и ссылки в нем. Это может помочь ... – HoneyBadger

ответ

1

В обоих запросов вы сравниваете целое с VARCHAR:

ip_src = '3305661330' 

Но ip_src на самом деле целое число (10) без знака. Так что попробуйте следующее:

ip_src = 3305661330 
+0

та же проблема – jarmouz

+1

Хотя это правда, было бы бессмысленно, если бы это вызывало проблему. – HoneyBadger

+1

Вы правы @HoneyBadger, но иногда имеет смысл очищать испорченные вещи, так как они могут вызвать неожиданное поведение. – JusticeJuice