我有以下简单的功能
function getAllJobs($userType)
{
if ($userType == 2) {
$sql = "SELECT * FROM jobs";
$stmnt = $db->prepare($sql);
$stmnt->execute();
return $stmnt->fetchAll();
} else {
return false;
}
}
上面通过一个简单的foreach()循环生成以下页面:

我在尝试TODO
当用户ALREADY申请显示作业时,我希望蓝色的“应用”按钮更改为“已应用”
现在我相信这可以/应该通过更改上面函数中的mysql查询来实现.
这是我的数据库:

我做了什么
我尝试在getAllJobs()函数中更改我的数据库查询,如下所示:
SELECT jobs.*,bids.*
FROM bids
INNER JOIN jobs on jobs.jobID = bids.jobID
WHERE bids.jobID = jobs.jobID
上述查询的问题是它只返回特定用户申请的作业.
我想要实现的另一个目的是显示用户已经将作业更改按钮文本应用于“已应用”或类似内容的所有作业.下图是我想要实现的一个例子.

任何帮助或建议非常感谢.如果您需要更多信息或代码,请发表评论.
编辑:
我应该在这里添加我的foreach代码:
最佳答案
试一试.
使用此查询,您将获得每个作业的“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代码如下所示:
附:我查看了您的架构,它看起来好像bid表包含特定用户的所有作业应用程序.如果这不正确,我上面的例子将是不正确的.
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|