-1

mysql select を使用して、特定の列「カテゴリ」に id が含まれる結果のみを返そうとしています。たとえば、フィールドに「1,2,4」がある場合があります。変数を使用して、その ID がフィールドに存在するかどうかを確認したいと思います。

これまでのコード:

   function returnSQLByCategory($criteria) {
    $lat = $criteria['lat'];
    $lng = $criteria['lng'];
    $categoryid = $criteria['categoryid'];
    $page_number = $criteria['page_number'];
    $nb_display = $criteria['nb_display'];

    //if($page_number=='') $page_number=1;
    //if($nb_display=='') $nb_display=10;
    $start = ($page_number*$nb_display)-$nb_display;

    $sql = "SELECT company, name, lng, lat, address, city, country, zip, link,
    ( 3959 * acos( cos( radians('".mysql_real_escape_string($lat)."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".mysql_real_escape_string($lng)."') ) + sin( radians('".mysql_real_escape_string($lat)."') ) * sin( radians( lat ) ) ) ) AS distance 
    FROM locations WHERE categoryid LIKE '%$categoryid%'";

    $sql .= " ORDER BY distance";

    return $sql;
    }

これは機能しておらず、categoryid '1' にある行しか表示されないため、'1' を返す必要があります。ステートメント「2」または例を手動で入力すると、意図したとおりに機能します!

ありがとうございます。

4

3 に答える 3

0

IN を使用しないのはなぜですか。

categoryid IN ('.$categoryid.')
于 2012-08-03T11:00:18.850 に答える
0
SELECT 
    company, 
    name, 
    lng, 
    lat, 
    address, 
    city, 
    country, 
    zip, 
    link 
FROM 
    locations 
WHERE 
    MATCH (categoryid) AGAINST ($categoryid IN BOOLEAN MODE)

カテゴリ ID の文字列をコンマで区切るのではなく、1 つのスペースで区切る必要がありますが、MATCH を使用する場合はどうでしょうか。ie('1 2 3 4') であり、SQL ステートメントでは一重引用符で囲みます。

于 2012-08-03T11:20:38.277 に答える
-1
$categoryid = 1;
$categoryid = mysql_real_escape_string($categoryid);

$sql = "SELECT * FROM `locations` WHERE categoryid = '$categoryid'";

$result = mysql_query($sql);
于 2012-08-03T11:02:02.793 に答える