【问题标题】:MySQL check if row with category existsMySQL检查是否存在具有类别的行
【发布时间】:2015-05-23 04:50:31
【问题描述】:

我在这个查询中使用了 Haversine 公式,它一直有效。目标是检查每一行是否在 $deflin 的值中具有某些类别,看起来像 $deflin = category1, category2, category3。结果将显示 50 公里内的行以及是否包含 $deflin 定义的任何类别。不知道如何使用 WHERE IN 或 LIKE 来解决这个问题。任何帮助表示赞赏。

用于查询的 MySQL

$awaka = "SELECT *,
( 6371 * acos( cos( radians(?) ) * cos( radians(job_latitude) ) *   
cos(radians(?) - radians(job_longitude) ) + sin( radians(?) ) *   
sin( radians(job_latitude) ) ) ) AS distance FROM job, users   
WHERE job.listee_id = users.user_id AND job.job_category LIKE ?   
HAVING distance < 50";

$result = $this->db->query($awaka, array($conlat, $conlong, $conlat, $deflin));     

【问题讨论】:

  • 你可以做job.job_category IN ('category1','category2','category3') 这将返回具有job_category 的行,该job_category 是category1、category2 或category3
  • 如果job_category 是一个ID,您必须将您的查询更改为job.job_category IN ($deflin)。请注意,您不想使用LIKE,因为此运算符在列中搜索模式。

标签: mysql sql sql-like where-in


【解决方案1】:

我认为您不喜欢使用LIKE 运算符,因为它只搜索列中的模式,并且您只想返回真正 具有您的类别之一的行。相反,您应该使用 IN 子句来检查作业是否具有您的类别之一:

// contains the id for each category
$categories = array(1, 4, 5, 6);
$deflin = implode(',', $categories);

// if job_category is a text column you could do like this instead
$categories = array('category1', 'category2', 'category3');
$deflin = implode(',', $categories);    

$awaka = "SELECT *,
( 6371 * acos( cos( radians(?) ) * cos( radians(job_latitude) ) *   
cos(radians(?) - radians(job_longitude) ) + sin( radians(?) ) *   
sin( radians(job_latitude) ) ) ) AS distance FROM job, users   
WHERE job.listee_id = users.user_id AND job.job_category IN ($deflin)   
HAVING distance < 50";

【讨论】:

  • 刚刚使用并调整了它。现在效果很好。感谢您的帮助:)。
猜你喜欢
  • 2016-12-05
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2011-11-21
  • 2011-06-16
  • 2014-03-15
相关资源
最近更新 更多