我有以下表格:
工作:
+--------+------------+------------------+
| job_id | company_id | job_title |
+--------+------------+------------------+
| 123456 | 342186 | MySQL Dev needed |
| 549201 | 175123 | PHP Dev needed |
| 784930 | 823491 | UI Designer pls |
+--------+------------+------------------+
和服务:
+------------+--------------+---------------------+
| company_id | company_name | company_email |
+------------+--------------+---------------------+
| 342186 | Microsoft | microsoft@email.com |
| 823491 | Quora | quora@email.com |
| 784930 | Facebook | facebook@email.com |
+------------+--------------+---------------------+
这是我目前从JOBS表中获取所有作业的查询:
// get all jobs from jobs table
$result = mysql_query("SELECT * FROM jobs") or die(mysql_error());
// check for empty result
if (mysql_num_rows($result) > 0) {
// looping through all results
// jobs node
$response["jobs"] = array();
while ($row = mysql_fetch_array($result)) {
// temp user array
$job = array();
$job["job_id"] = $row["job_id"];
$job["company_id"] = $row["company_id"];
$job["company_name"] = $row["company_name"]; //<<<-------THIS
$job["job_title"] = $row["job_title"];
// push single product into final response array
array_push($response["jobs"], $product);
}
else { //Error }
使用上面的代码,我得到了所有的工作,现在,我如何修改我的查询/代码,以便&#34; company_name&#34;属于各自的工作?例如:
由于工作&#34; Mysql Dev需要&#34; 由 company_id = 342186 发布,因此它属于 Microsoft 的
我正在考虑在实际的while循环中进行另一个while循环,以便我可以获得确切的公司信息,但我不相信这是最好的方法。
答案 0 :(得分:3)
您只需在查询中使用联接,如下所示:
select
co.company_name,
jo.company_id,
jo.job_id,
jo.job_title
from
jobs jo
join companies co
on jo.company_id=co.companyid
此外,我曾经写过question and answer一段时间以帮助解决与您类似的问题 - 这样您就可以更好地了解查询。
答案 1 :(得分:3)
SELECT * FROM jobs
LEFT JOIN companies ON jobs.company_id = companies.company_id
这将“加入”两个查询,并在一行中为您提供信息,并通过两个表的公共标识符“加入”(company_id)
答案 2 :(得分:1)
您也可以使用如下查询代替连接:
SELECT
c.company_name,
j.company_id,
j.job_id,
j.job_title
FROM
jobs j,
companies c
WHERE
c.id = j.company_id
另外两个注意事项:
出于性能原因,您应该只选择查询中所需的列。并且强烈建议使用PDO或MySQLi而不是mysql _ -functions,因为从PHP 5.5开始已经弃用。
php.net:
现在不推荐使用原始MySQL扩展,并将生成 连接到数据库时出现E_DEPRECATED错误。相反,使用 MySQLi或PDO_MySQL扩展。