2013-05-01 150 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