Php 如何获得包含所有结果的字段组,小于所有等

Php 如何获得包含所有结果的字段组,小于所有等,php,mysql,sql,grouping,Php,Mysql,Sql,Grouping,我需要根据用户在文本字段中输入的关键字构造一个查询,该查询将执行以下操作:获取关键字并在表中搜索,然后car拥有所有给定的关键字,少于all并继续向下搜索只有一个关键字的car。 我的桌子看起来像这样: field_id | car_id | keyword | ---------------------------- 1 | 5 | 1989 | ----------------------------- 2 | 8 | old |

我需要根据用户在文本字段中输入的关键字构造一个查询,该查询将执行以下操作:获取关键字并在表中搜索,然后car拥有所有给定的关键字,少于all并继续向下搜索只有一个关键字的car。 我的桌子看起来像这样:

field_id | car_id | keyword |
----------------------------
1        | 5       | 1989   |
-----------------------------
2        | 8       | old    |
-----------------------------
3        | 8       | ford   |
-----------------------------
6        | 8       | cheap  |
-----------------------------
4        | 7       | ford   |
-----------------------------
6        | 7       | cheap  |
-----------------------------
5        | 6       | ford   |
-----------------------------
假设用户搜索了“old”、“ford”和“cheap”,则应返回car_id 8、7和6,因为它们包含关键字。此外,我需要知道哪辆车有哪些关键字(8:“旧”、“福特”、“便宜”和7:“福特”、“便宜”和6:“福特”)。我不是MySQL的专家,所以我现在不知道是否有可能在这里创建某种多维数组

我有一个查询,只选择输入了所有关键字的汽车,如果它有任何用途:

Select car_id from keywords 
Where keyword in ("old","ford", "cheap") 
group by car_id having count(*) = 3;    

你不需要拥有,因为它只会在只有3辆车属于给定关键字时发送。试试这个

Select car_id from keywords ,,GROUP_CONCAT(keyword)
Where keyword in ("old","ford", "cheap") 
group by car_id 

这将给你逗号分隔的关键字,属于汽车

对不起,但我真的看不出这个问题与我的有什么关系:)这将只返回所有有“旧”或“福特”或/和“便宜”的汽车并按车号对它们进行分组。但这并不能告诉我哪辆车有哪些关键字。如果使用您提供的查询,输出结果应该与您得到的结果相同,但必须有某种方法知道哪辆车有哪些关键字。它应该像一个多维数组,其中car_id是键,与该car_id匹配的所有关键字都是由answer更新的子数组的内容。这将给你逗号分隔的关键字属于这个车号,你可以在php中通过分解使其成为数组。希望这能起作用。你应该添加“order by count(*)desc”子句,以便按你想要的顺序获得结果。太棒了,它能起作用!谢谢你,莫耶德!