-1

我正在创建一个工作搜索引擎,它将支持高级搜索。

在此处输入图像描述

我想要做的是允许某人搜索“样本”,然后将付款类型设置为“小时”作为标准。这将只显示示例技术工作。

下面的代码工作并输出预期的结果

$result = mysqli_query($con,"SELECT * FROM tnqj3_content LEFT JOIN tnqj3_fieldsattach_values ON tnqj3_fieldsattach_values.articleid = tnqj3_content.id WHERE tnqj3_content.title LIKE '%$q_keywords%' AND tnqj3_fieldsattach_values.value='hour'

但是,我想添加多个标准,以便他们也可以要求支付率为“10”(id=4)。当我在语句末尾添加“OR”时,它会得到两次结果

$result = mysqli_query($con,"SELECT * FROM tnqj3_content LEFT JOIN tnqj3_fieldsattach_values ON tnqj3_fieldsattach_values.articleid = tnqj3_content.id WHERE tnqj3_content.title LIKE '%$q_keywords%' AND tnqj3_fieldsattach_values.value='hour' OR tnqj3_fieldsattach_values.value='10'

如果我将 OR 更改为 AND,则找不到结果。如果找到两个条件,我该如何设置它以获取一次该行?

对于上下文,这是代码:(Ps。它都被清理了):

// Get search paramaters
$q_keywords = $_GET['q_keywords'];

$result = mysqli_query($con,"SELECT * FROM tnqj3_content LEFT JOIN tnqj3_fieldsattach_values ON tnqj3_fieldsattach_values.articleid = tnqj3_content.id WHERE tnqj3_content.title LIKE '%$q_keywords%' AND tnqj3_fieldsattach_values.value='hour' OR tnqj3_fieldsattach_values.value='10' ");

while($row = mysqli_fetch_array($result))
  {
      echo "<div class='search-result'><a href='/index.php?option=com_content&view=article&id=" . $row['id'] . "' class='search-result-title'>" . $row['title'] . "</a>" . $row['introtext'];

      echo "</div>";
  }
4

1 回答 1

2

尝试这个:

SELECT * 
FROM tnqj3_content 
JOIN (
  SELECT articleid FROM tnqj3_fieldsattach_values
  GROUP BY articleid
  HAVING SUM(
    CASE value
     WHEN 'hour' THEN 1
     WHEN '10' THEN 1
     ELSE 0
    END 
    ) = 2
  ) t
ON t.articleid = tnqj3_content.id 
WHERE tnqj3_content.title LIKE '%$q_keywords%'

在这里,您必须在 sql 子句中添加每个用户提供的过滤器,并且还要CASE给出过滤器的计数以与'10.SUM2

于 2013-12-06T19:20:46.247 回答