我有以下问题。
我的项目中有用户过滤器,我希望从数据库中选择仅在表格中使用$ 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的了解并不是那么好。
感谢您对我的耐心。
答案 0 :(得分:2)
你应该试一试
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' ) );