我有以下简单的功能
function getAllJobs($userType)
{
if ($userType == 2) {
$sql = "SELECT * FROM jobs";
$stmnt = $db->prepare($sql);
$stmnt->execute();
return $stmnt->fetchAll();
} else {
return false;
}
}
我在尝试TODO
当用户ALREADY申请显示作业时,我希望蓝色的“应用”按钮更改为“已应用”
现在我相信这可以/应该通过更改上面函数中的mySQL查询来实现.
这是我的数据库:
我做了什么
我尝试在getAllJobs()函数中更改我的数据库查询,如下所示:
SELECT jobs.*,bids.*
FROM bids
INNER JOIN jobs on jobs.jobID = bids.jobID
WHERE bids.jobID = jobs.jobID
我想要实现的另一个目的是显示用户已经将作业更改按钮文本应用于“已应用”或类似内容的所有作业.下图是我想要实现的一个例子.
任何帮助或建议非常感谢.如果您需要更多信息或代码,请发表评论.
编辑:
PHP
foreach ($jobs as $job){
$description = $job['description'];
$jobDescription = substrwords($description,30);
echo 'PHP
echo '
最佳答案
试一试.
使用此查询,您将获得每个作业的“appliedFor”列.如果为1,则表示用户已申请该作业.如果为0,则用户尚未申请该作业.
SELECT
jobs.*,(COALESCE(bids.bidId,0) > 0) AS appliedFor
FROM jobs
LEFT JOIN bids ON bids.jobID = jobs.jobID AND bids.userID = 1;
在解释之前,请参见此处的测试:http://sqlfiddle.com/#!9/eb5a4f/1/0
真的很简单……
>使用jobID和userID在bid表上执行LEFT JOIN.这意味着如果出价表中有相应的行,则bid.bidID将为数字,否则为NULL.
>然后我在该列上执行了COALESCE,这意味着如果值为NULL,则将其更改为0.
>将上面的内容括在括号中,并确保结果大于0.这为您提供了一个布尔值,可以为查询结果中的别名使用别名.
我使用以下架构进行了测试:
CREATE TABLE jobs (
jobID int NOT NULL AUTO_INCREMENT,PRIMARY KEY (jobID)
);
CREATE TABLE bids (
bidID int NOT NULL AUTO_INCREMENT,userID int,jobID int,PRIMARY KEY (bidID)
);
INSERT INTO jobs () VALUES();
INSERT INTO jobs () VALUES();
INSERT INTO jobs () VALUES();
INSERT INTO bids (userID,jobID) VALUES(1,1);
INSERT INTO bids (userID,jobID) VALUES(2,3);
PHP
foreach ($jobs as $job){
$description = $job['description'];
$jobDescription = substrwords($description,30);
$buttonText = "Apply";
if ($job['appliedFor']) { // This is where we're using the new value we've selected
$buttonText = "Applied";
}
?>
PHP echo $job['headline']; ?>PHP echo $jobDescription; ?>
PHP echo $job['datePosted']; ?>