MySQL Query返回所有字段而不是过滤

时间:2014-05-18 17:25:15

标签: php mysql json

以下查询返回我表中的所有行,而不是仅过滤那些与job_category字段中的字符串“Marketing”相等的行,无法找出原因。

这是查询语句以及我如何将结果存储在变量中:

<?php

// array for JSON response
$response = array();


// include db connect class
require_once __DIR__ . '/db_connect.php';

// connecting to db
$db = new DB_CONNECT();

// check for post data
if (isset($_GET["category_selected"])) {
    $category = $_GET['category_selected'];

    $result = mysql_query('
          SELECT * FROM jobs LEFT JOIN companies
          ON jobs.company_id = companies.company_id
          WHERE jobs.job_category = $category');

// get all jobs filtered from jobs table

// 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"];
        $job["job_title"] = $row["job_title"];
        $job["job_location"] = $row["job_location"];
        $job["job_hours"] = $row["job_hours"];
        $job["job_category"] = $row["job_category"];

        // push single product into final response array
        array_push($response["jobs"], $job);
    }
    // success
    $response["success"] = 1;

    // echoing JSON response
    echo json_encode($response);
} else {
    // no jobs found
    $response["success"] = 0;
    $response["message"] = "No jobs found";

    // echo no users JSON
    echo json_encode($response);
}
?>

难怪为什么?这是通过json调用,我已经测试了代码只接收一行而不是很多行并且它可以工作。

编辑了解更多信息:

这是表格(样本):

工作:

+--------+------------+------------------+-------------------+
| job_id | company_id |  job_title       |  job_category     |
+--------+------------+------------------+-------------------+
| 123456 | 342186     | MySQL Dev needed | Management        |
| 549201 | 175123     | PHP Dev needed   | Marketing         |
| 784930 | 823491     | UI Designer pls  | Marketing         |
+--------+------------+------------------+-------------------+

和服务:

+------------+--------------+---------------------+
| company_id | company_name |  company_email      |
+------------+--------------+---------------------+
| 342186     | Microsoft    | microsoft@email.com |
| 823491     | Quora        | quora@email.com     |
| 784930     | Facebook     | facebook@email.com  |
+------------+--------------+---------------------+

我想返回JOBS表中包含job_category中“Marketing”的每一行

2 个答案:

答案 0 :(得分:1)

因为您正在使用*,这意味着选择所有

尝试手动选择列名称:

 SELECT column_u_need1 , column_u_need2,....,column_u_need18  FROM jobs ........ 
 GROUP BY some_column

注意:如果两个表中都有相同的名称,请使用别名:

    SELECT jobs.column_u_need1 , companies.column_u_need2  FROM jobs  ........ 

编辑:您应该使用INNER JOIN,而不是LEFT JOIN

 SELECT * FROM jobs INNER JOIN companies
      ON jobs.company_id = companies.company_id
      WHERE jobs.job_category = "Marketing"

答案 1 :(得分:1)

我想把它作为对你原帖的评论,但还没有足够的声誉......

你应该使用INNER JOIN,因为它看起来像jobs.company_id是一个外键,并且在带有该id的公司表中不应该有超过1个结果。

另外,这实际上是代码吗?看起来您可能会在查询中添加$ category变量?您是否已使用您正在寻找的实际值自行运行该查询?它是否在php mysql admin中作为纯sql运行?您是否回应了用于填充查询的变量,以确保它符合您的想法?

Re:你的新编辑: 试试你的sql:

$result = mysql_query('
      SELECT * FROM jobs LEFT JOIN companies
      ON jobs.company_id = companies.company_id
      WHERE jobs.job_category = "'.$category.'"');

这样做,看看你得到了什么:

$sql = 'SELECT * FROM jobs LEFT JOIN companies
      ON jobs.company_id = companies.company_id
      WHERE jobs.job_category = "'.$category.'"'
echo $sql;

然后尝试在sql客户端中运行已经回显的内容并查看它是否运行。如果是这样,你的问题就在别的地方。