PHP& MySQL:从2个表中查询

时间:2014-05-17 08:17:28

标签: php mysql json

我有以下表格:

工作:

+--------+------------+------------------+
| 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循环,以便我可以获得确切的公司信息,但我不相信这是最好的方法。

3 个答案:

答案 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扩展。