php - 搜索时高级 ORDER BY

标签 php mysql sql sorting sql-order-by

我们制作了一个搜索字段,您可以在其中搜索多种成分并查找食谱。

我们想根据搜索框中成分最多的食谱对食谱进行排序。

if (isset($_POST['search'])) {
$searchquery = $_POST['search'];

$vals = "'" . str_replace(",", "','", $searchquery) . "'";

$query = mysql_query("SELECT * FROM opskrifter WHERE id IN 
(SELECT opskrifterid FROM ingredienser WHERE ing_name IN ('$vals'))") or die("search failed");

是否可以对它们进行排序?

编辑: 食谱表

+---------+----------+-------------+------------+------------+--+
|   id    | name     |  procedure  |  category  |  image_url |  |
+---------+----------+-------------+------------+------------+--+
|       1 | Sausage  | Fry it      | Main dish  | www....com |  |
|       2 | Pizza    | Bake it     | Main dish  | www....com |  |
|       3 | Burger   | Eat it      | Main dish  | www....com |  |
+---------+----------+-------------+------------+------------+--+

成分表

+---------+----------+-------------+------------+------------+--+
|   id    | recipeid |  ing_num    |  ing_meas  |   ing_name |  |
+---------+----------+-------------+------------+------------+--+
|       1 | 1        | 1           | stack      | sausage    |  |
|       2 | 2        | 200         | g          | wheat      |  |
|       3 | 2        | 100         | g          | beef       |  |
+---------+----------+-------------+------------+------------+--+

更新

我已经尝试实现 Beginner/Raymond 的解决方案:

"SELECT *, COUNT(*) as `total_ingredients`
  FROM opskrifter as k
     , ingredienser as i
 WHERE k.id = i.opskrifterid 
   AND i.ing_name IN ($vals)
   GROUP BY k.id
 ORDER BY COUNT(*) DESC"

其中 $vals = "'"。 str_replace(",", "', '", $searchquery) 。 "'";$searchsquery = $_POST['search'];//来自搜索字段

不幸的是,搜索只考虑了第一个词,例如: “salt, pasta” 它显示了每个包含盐的食谱。但是包含这两种成分的食谱并不是排序最高的。

我错过了什么?

最佳答案

在我之前的下面的答案只是错过了一个 GROUP BY 这就是为什么它只返回一行

SELECT k.id
     , k.name
     , COUNT(*) as `total_ingredients`
  FROM receipts as k
     , ingredients as i
 WHERE k.id = i.receipt_id 
   AND i.ing_name IN ('sausage','beef', 'wheat', 'sauce', 'flour', 'wheat', 'beef', 'ketsup', 'onion', 'garlic')
   GROUP BY k.id, k.name
 ORDER BY COUNT(*) DESC;

JS Fiddle Here

关于php - 搜索时高级 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551617/

相关文章:

php - 将两个或多个简单数组转换为多维数组?

php - 将 "Defaults"数组与 "Input"数组合并? PHP 哪个函数?

c# - 使用 LINQ C# 递归获取所有子级

php - 使用 php 设置时输入值不可见

sql - 选择列中具有特定值的行

php - mysql 查询帮助插入到多行,其中几个字段相同

php - 如何使用 PHP 从服务器打印内容?

javascript - PHP 变量,并更改 javascript 属性

mysql - Hibernate和spring mvc中实体的双向映射

php - 表格不显示空记录