用两条语句。
表:class存储用户(user)与课程(lesson)相关信息。其中有一用户test选择了"政治,历史"。
表:exam存储科目(lesson)的试题(paper)。$sql1 = select lesson from class where user ='test'; 
执行$sql1候,设返回的结果为$row, $row="政治,历史";$sql2 = select paper where lesson in ($row);
不知你说的是不是这个意思?

解决方案 »

  1.   

    johnpanq(飞花逐月),您想的和我一样,可是不行哦~~我的代码是把用户选择的课程放在了session里。
    # 试卷列表SQL
    $get_homework_sql = "SELECT `h_id`,`h_s_name`,`h_name`,`h_score`,`h_start_date`,`h_end_date`,`h_used` ";
    $get_homework_sql.= "FROM `homework` ";
    $get_homework_sql.= "WHERE `h_s_name` IN ($_SESSION[MEMBER_SUBJECT]) ";  //这里
    $get_homework_sql.= "ORDER BY `h_id` DESC ";
    $get_homework_sql.= "LIMIT $rsOffset,$pageSize";查询时代码出错。有可能您发现了 SQL 分析器的 bug。请仔细检查您的查询,包括引号是否正确及是否匹配。其它可能的失败原因可能由于您上传了超过引用文本区域外的二进制数据。您还可以在 MySQL 命令行界面试一下您的 查询。如果可能的话,以下会列出 MySQL 服务器的错误输出,这可能对您解决问题有一定的帮助作用。如果您仍然有问题,或者命令行界面执行成功而分析器出错,请将您的 SQL 查询缩减到导致问题的某一条语句,然后和下面剪切区中的数据一起提交一个 bug 报告:
      

  2.   

    你输出$get_homework_sql的内容看看
    对应$_SESSION[MEMBER_SUBJECT]的部分是array吧?如果$_SESSION[MEMBER_SUBJECT]是数组,你需要连接成串
    "'".join("','",$_SESSION[MEMBER_SUBJECT])."'"
    再放进查询串中
      

  3.   

    不是数组,是字符串SELECT `h_id`,`h_s_name`,`h_name`,`h_score`,`h_start_date`,`h_end_date`,`h_used` FROM `homework` WHERE `h_s_name` IN (政治|X|软件工程) ORDER BY `h_id` DESC LIMIT 0,10 
      

  4.   

    为什么会是(政治|X|软件工程)
    而不是(政治,软件工程)呢?你用phpadmin操作的数据库吗?
    还有你的课程字段是不是存储的"政治,软件工程"呢?
      

  5.   

    ... IN ('政治','X','软件工程') 只能是用逗号分隔的数和串
    你总得遵守规则吧
      

  6.   

    对呀!要用,号。
    你只要把你的$_SESSION[MEMBER_SUBJECT]的内容转换成 ‘政治','软件工程','其它’ 的格式就应该没问题呀。

    $_SESSION[MEMBER_SUBJECT]="‘政治','软件工程','其它'";