Я использую объяснение, чтобы понять, почему мой запрос попадает в каждую строку в моей базе данных, и я не понимаю, почему это происходит.
Может ли кто-нибудь взглянуть и дать мне подсказку, чего мне не хватает?
Моя база данных - MyISAM, и я использую Mysql 5.1, PHP5
Вот мой стол:
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`user_id` bigint(20) NOT NULL auto_increment,
`name` varchar(40) default NULL,
`city` varchar(90) default NULL,
`latitude` float NOT NULL default '0',
`longitude` float NOT NULL default '0',
PRIMARY KEY (`user_id`),
UNIQUE KEY `name` (`name`),
KEY `Radius Search` (`latitude`,`longitude`),
KEY `Radius 2` (`longitude`,`latitude`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=38666 ;
Вот мой запрос:
$query =
"SELECT
name, city
FROM
users
WHERE
(
(69.1 * (latitude - " . $user->latitude . ")) *
(69.1 * (latitude - " . $user->latitude . "))
) + (
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3)) *
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3))
) < " . pow($radius, 2) . "
ORDER BY
(
(69.1 * (latitude - " . $user->latitude . ")) *
(69.1 * (latitude - " . $user->latitude . "))
) + (
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3)) *
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3))
) ASC";
И, наконец, мое объяснение ...
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE users ALL NULL NULL NULL NULL 38665 Using where; Using filesort