2013-05-01 151 views
0

我有一个表格,其中用户选择可用的技能:SELECT查询选择

<form name="myForm" action="jssearch.php" method="post"> 

<input type="checkbox" name="chk1[]" value="1">Helpdesk Support 
<input type="checkbox" name="chk1[]" value="2">DB Admin<br> 
<input type="checkbox" name="chk1[]" value="3">C++ Programming 
<input type="checkbox" name="chk1[]" value="5">HTML<br> 
<input type="checkbox" name="chk1[]" value="6">PHP<br> 
<input type="checkbox" name="chk1[]" value="7">Memory Dump Analysis<br> 
<input type="checkbox" name="chk1[]" value="8">SQL<br><br> 

<input type="submit" name="Update" value="Search"> 

</form> 

在此基础上选择,我想在其上运行一个多到多表查询并显示可用包含所选技能的作业。

这是我的查询到目前为止:

<?php 

session_start(); 
mysql_connect("localhost", "root", "root") or die(mysql_error()); 
mysql_select_db("jobsearch") or die(mysql_error()); 

$variable=$_POST['chk1']; 
foreach ($variable as $variablename) 
{ 
    $query = mysql_query(
     "SELECT jobs.jobid AS job_id, jobs.jobtitle AS 
     job_title,jobs.salary AS salary_desc, GROUP_CONCAT(skills.Desc) AS skills_desc  
     FROM jobskillsjoin 
     INNER JOIN jobs ON jobs.jobid = jobskillsjoin.JobID 
     INNER JOIN skills ON skills.skill_id = jobskillsjoin.SkillID 
     WHERE skills.skill_id = '".$variablename."' 
     GROUP BY jobs.jobid 
     ") 
    or die(mysql_error()); 
} 

echo "<table border='1'> 
<tr> 
<th>Job ID</th> 
<th>Job Title</th> 
<th>Skills required</th> 
<th>Salary Offered</th> 
</tr>"; 

while($row = mysql_fetch_array($query)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['job_id'] . "</td>"; 
    echo "<td>" . $row['job_title'] . "</td>"; 
    echo "<td>" . $row['skills_desc'] . "</td>"; 
    echo "<td>" . $row['salary_desc'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 


?> 

会发生什么事是,虽然只有最后选择的技能是通过查询运行。我想要显示所有的“点击”。

我想我需要一个循环和一个数组,但我不知道该怎么做。

回答

2

当你像你这样提交一个复选框时,它成为PHP端的一个数组。你需要在where子句中使用这个数组。使用函数implode将数组转换为字符串并使用运算符“in”。所以,你的where子句将是:

$query = mysql_query("SELECT jobs.jobid AS job_id, jobs.jobtitle AS 
     job_title,jobs.salary AS salary_desc, GROUP_CONCAT(skills.Desc) AS skills_desc  
    FROM jobskillsjoin 
    INNER JOIN jobs ON jobs.jobid = jobskillsjoin.JobID 
    INNER JOIN skills ON skills.skill_id = jobskillsjoin.SkillID 
    WHERE skills.skill_id in (". implode(",",$_POST['chk1']) .") 
    GROUP BY jobs.jobid 
    ") 

这样,查询将返回所有的技能检查。

要返回具有至少一个技能选择你需要查询的逻辑更改为类似工作的所有技能:

SELECT j.jobid AS job_id, j.jobtitle AS 
      job_title, GROUP_CONCAT(skills_Desc) AS skills_desc  
     FROM jobskillsjoin 
     INNER JOIN jobs j ON j.jobid = jobskillsjoin.JobID 
     INNER JOIN skills ON skills.skill_id = jobskillsjoin.SkillID 
where exists(select 1 from jobskillsjoin where jobid = j.jobid and SkillID in (1,2)) 
     GROUP BY j.jobid; 

请注意我更改查询。不要复制并粘贴到您的代码。调整它以确保你不会错过任何事情。

+0

它的工作原理!我已经在这个几个小时了...非常感谢Jose :-) – Gary 2013-05-01 15:30:37

+0

嗯......虽然有用,但它只显示选中的技能。我的意思是,如果一项工作具有与之相关的技能1 2和3,并且我搜索技能1,它会找到这份工作。但它唯一的打印技能1 ...我需要它来打印特定工作的所有技能。有任何想法吗? – Gary 2013-05-01 15:33:31

+0

改变你的问题,使我的最后一版有意义 – 2013-05-01 15:51:41