mysql - Laravel mysql 多where查询

标签 mysql laravel where-clause

我有以下内容

return DB::table('recipe_symbols')
   ->where('symbol_id', 8)
   ->get(['recipe_id']);

它工作得很好。现在我有以下返回更过滤的结果

return DB::table('recipe_symbols')
   ->where('symbol_id', 8)
   ->where('symbol_id', 16)
   ->get(['recipe_id']);

我没有得到任何结果,即使 symbol_id 为 8 和 16 的行存在。我尝试了原始查询,但仍然是同样的问题。

出了什么问题?我想要实现的是根据用户选择的符号通过 symbol_id 获取食谱。

我尝试了 whereIn() 但这会带回具有特定 symbol_id 但没有其他的食谱。例如,它带来了 2 个食谱,其中一个的 symbol_id 仅为 8,第二个有 8 和 16。我需要获取所有 symbol_id = 8 的食谱和 16,没有别的。

编辑*** 数据库结构

recipe_symbols_table
----------------------
|id | recipe_id | symbol_id |
-----------------------------
|1  | 2         | 8
|2  | 2         | 16
|3  | 3         | 8
|4  | 3         | 16
|5  | 4         | 8
|6  | 4         | 30
|7  | 5         | 8
|8  | 5         | 28    
|9  | 6         | 8
|10 | 6         | 31
|11 | 7         | 8
|12 | 7         | 18

编辑***

$sql = 'SELECT * FROM sie_hp_cookbook_recipes_symbols WHERE symbol_id=8 and symbol_id=16';
$qry = DB::select($sql);

最佳答案

以下给出了前两个结果(2 和 3)。希望这对您有所帮助!

SELECT a.`recipe_id`
FROM `recipe_symbols_table` a
    INNER JOIN `recipe_symbols_table` b
        ON a.`recipe_id` = b.`recipe_id`
WHERE b.`symbol_id` IN (8,16)
GROUP BY a.`recipe_id`
HAVING COUNT(DISTINCT b.`symbol_id`) = 2

关于mysql - Laravel mysql 多where查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638375/

相关文章:

php - Android:使用 volley 将数据发布到 laravel 服务器时出现意外响应代码 500

php - 如何使用 Laravel Eloquent 返回多个关系?

java - Sqlite 查询问题

MySQL 获取每个位置的最后结果

php - 使用 php 将古吉拉特语数据从 csv 存储到 MySQL 数据库

c# - 是否可以使用MySql赋值运算符(:=) in a MySqlCommand?

php - 无法使用 Laravel 连接到本地 MySQL 服务器

mysql - 在一个查询中获取所有 WHERE 案例

mysql - 如何获得不同日期的各个最大值之间的差异?

mysql - 正则表达式,将 "22,09"替换为 "22.09"