gpt4 book ai didi

php - 选择在另一个表中具有一组值的行

转载 作者:行者123 更新时间:2023-11-29 02:30:30 25 4
gpt4 key购买 nike

我有以下问题。

我的项目中有用户过滤器,我希望仅从数据库中选择在表 inastrument 中具有 $fm_instrument 指定的所有工具的用户。

表用户:

id_user   |  user_type   |
--------------------------
| 1 | 2 |

桌面乐器是这样的:

| id_user_instrument   |  id_user     | instrument_title |
----------------------------------------------------------
| 1 | 1 | organ |
| 2 | 1 | flute |
| 3 | 1 | piano |

示例:过滤器返回 $fm_instrument='flute,organ'

我这样做:

if(isset($fm_instrument) && $fm_instrument != '')
{
$instrument_arr = explode(',',$fm_instrument);
$instrument_sql = '';
foreach ($instrument_arr as $i=>$val) // pro kazdy nastroj
{
if($i != 0) {$instrument_sql.=" AND ";}
$instrument_sql .= " ( instrument_title='".$val."' ) ";
}
$instrument_sql_part = " AND ($instrument_sql)";
}

$user_sql ="SELECT * FROM `user` AS pu
LEFT JOIN instrument AS i USING(`id_user`) WHERE user_type=2 $instrument_sql_part ";

但它不适用于一种以上的乐器。

我确信正确的 mysql_query 有更简单的解决方案,但我对 mysql 的了解不是很好。

感谢您对我的耐心等待。

最佳答案

你应该试试这个

SELECT 
*
FROM
users
WHERE
user_type = 2
AND
id_user IN
( SELECT
id_user
FROM (
SELECT
id_user,
GROUP_CONCAT( instrument_title ) instrument_titles
FROM
instrument
WHERE
FIND_IN_SET( instrument_title, 'flute,organ' )
GROUP BY
id_user ) tmp
WHERE
LENGTH( instrument_titles ) = LENGTH( 'flute,organ' ) );

SQL Fiddle DEMO

关于php - 选择在另一个表中具有一组值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com