目前有两张表:mhf (意为models_has_features), mhr(意为models_has_replacements). 其中msf的字段为Model_Name和FD_Name(意为Feature Name),msr的字段为Model_Name和RD_Name(意为Replacement Name). 现在通过php获取了用户对于features 和 replacement的选项,想通过这些选项进行数据库搜索,从而返回model名称。感谢上个帖子版友的帮助,我目前的相关代码如下:
$usrinput1=array_merge($outputs,$functions,$qualifications); //这里是用户输入的features选项,其中各个变量均是数组,由多选列表而来
$usrinput2=array_merge($ge,$ametek,$weschler,$prime,$vmi,$foxboro,$bailey,$chessell,$hays); //这里是用户输入的replacement选项,其中各个变量也均是数组 $query0="SELECT mhf.M_Name FROM mhf,mhr 
          WHERE mhf.M_Name=mhr.M_Name 
          AND mhf.FD_Name='$input_signal' 
          AND mhf.FD_Name='$power_input' 
          AND mhf.FD_Name='$display' 
          AND mhf.FD_Name='$case_mounting'";
 //其中,$power_input,$display,$case_mounting 均是字符串变量,是由用户选择的单选列表获取而来 $query1="AND mhf.FD_Name='".implode("' AND FD_Name='",$usrinput1)."'";
 $query2="AND mhr.RD_Name='".implode("' AND RD_Name='",$usrinput2)."'"; $query=$query0.$query1.$query2;//这里是想把这三个query组合成一个完整的query,从而达到 select SELECT mhf.M_Name FROM mhf,mhr  WHERE mhf.M_Name=mhr.M_Name  AND mhf.FD_Name='$input_signal'... AND mhf.FD_Name="userinput1里各个值" AND mhr.RD_Name="userinput2里各个值" 的效果。 $result = mysql_query($query) or die("Query failed"); 
 
然后就是输出代码, print "<table>\n";   
 while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {  
  print "\t<tr>\n";        foreach ($line as $col_value) {            print "\t\t<td>$col_value</td>\n";        }        print "\t</tr>\n";    }    print "</table>\n"; 
可是运行了之后没有任何显示啊,我保证自己的测试选项是应该有结果的,可是显示不出来,希望各位高人看看我的代码哪里出错了,多谢!

解决方案 »

  1.   

              AND mhf.FD_Name='$input_signal' 
              AND mhf.FD_Name='$power_input' 
              AND mhf.FD_Name='$display' 
              AND mhf.FD_Name='$case_mounting'";
    满足这这样的条件可能吗?
    显然 $input_signal,$power_input,$display,$case_mounting 是不同的变量,如果上面的条件成立,只能是这4个变量的值相等,那么要弄成4个变量干什么?
     
    请给出表结构、字段说明及取值范围
      

  2.   

    输出看一下 $query的sql,执行一下看看结果不就知道了
      

  3.   

    echo $query;把打印出来的sql语句执行下看看可有结果,应该就是sql查询的问题
      

  4.   


     $query1="AND mhf.FD_Name='".implode("' AND mhf.FD_Name='",$usrinput1)."'";
     $query2="AND mhr.RD_Name='".implode("' AND mhf.RD_Name='",$usrinput2)."'";
     $query=$query0." ".$query1." ".$query2;将query的sql语句打出来看看,在将其粘贴到mysql中,看看是否能正确执行。
      

  5.   


    恩,我也意识到了这个问题,但却是需要同一个字段满足多个值时进行查询,不知道有没有什么解决方法呢?比如通过noexist? 谢谢!
      

  6.   

    看下可不可以用LIKEAND mhf.FD_Name LIKE '%{$input_signal}%' 
    AND mhf.FD_Name LIKE '%{$power_input}%' 
    AND mhf.FD_Name LIKE '%{$display}%' 
    AND mhf.FD_Name LIKE '%{$case_mounting}%'";
      

  7.   

    那要看你的 FD_Name中数据是如何组织的
    给出几个数据看看,可能问题远没有你想得那么复杂
      

  8.   


    mhf的数据截图:
    mhr的数据截图:
    数据库结构图:
    网页表单图
      

  9.   

    在你的 mhf 表中,M_Name 显然是个分类
    那么,传入的数据
    谁对应 M_Name
    谁对应 FD_Name条件表达式应为
    M_Name='值' AND FC_Name='值'如果可以多选,则为
    M_Name in('值1','值2','值3'...) AND FC_Name in('值1','值2','值3'...)
      

  10.   

    或者将你的 AND 变为 OR 试试
      

  11.   


    在传入的值中,没有M_Name...全部都是FD_Name,是想根据所有的FD_Name,返回拥有这些features的Models...