PHP запрос MySQL, как (содержит) - PullRequest
0 голосов
/ 10 апреля 2011

Я пытаюсь отфильтровать SQL-запрос по слову, содержащемуся в столбце БД.

Это работает (Пожалуйста, не говорите мне, что Имея неправильно ... это не работает с Где)

    $query = sprintf("SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( `Lat` ) ) ) ) AS distance FROM Tutors HAVING distance < '%s' ORDER BY distance",
      mysql_real_escape_string($lat),
      mysql_real_escape_string($lng),
      mysql_real_escape_string($lat),
      mysql_real_escape_string($radius));
    $result = mysql_query($query, $dbConn);

Я хотел бы добавить что-то вроде:

    $query = sprintf("SELECT *, ( 3959 * acos( cos( radians('%s') ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( `Lat` ) ) ) ) AS distance FROM Tutors HAVING distance < '%s' AND SubjectList like '%s' ORDER BY distance",
      mysql_real_escape_string($lat),
      mysql_real_escape_string($lng),
      mysql_real_escape_string($lat),
      mysql_real_escape_string($radius),
      mysql_real_escape_string($subject));
    $result = mysql_query($query, $dbConn);

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Вот решение, которое теперь работает - спасибо всем за помощь

$query = "SELECT *, ( 3959 * acos( cos( radians('". addslashes($lat) ."') ) * cos( radians( `Lat` ) ) * cos( radians( `Long` ) - radians('". addslashes($lng) ."') ) + sin( radians('". addslashes($lat) ."') ) * sin( radians( `Lat` ) ) ) ) AS distance FROM Tutors WHERE `SubjectList` LIKE '%". addslashes($subject) ."%' GROUP BY distance HAVING distance < '". addslashes($radius) ."'";
0 голосов
/ 10 апреля 2011

Вы пробовали:

SELECT *,(formula) AS distance FROM Tutors WHERE SubjectList LIKE '%s' ORDER BY distance HAVING distance < '%s'

WHERE действует на все строки, тогда как HAVING действует на агрегатные функции, поэтому вы хотите убедиться, что вы сначала уменьшили набор, на который действует формула агрегата.Это также даст более эффективный запрос.

HAVING vs. WHERE - иногда очень липкое различие, эта ссылка очень хорошо описывает его:

http://blog.sqlauthority.com/2007/07/04/sql-server-definition-comparison-and-difference-between-having-and-where-clause/

...