从mySQL查询,加入和返回ID

时间:2014-10-29 14:06:17

标签: mysql join inner-join

我正在尝试使用JOIN进行查询,该查询应该如下:

  1. 对用户进行成像,在搜索框中输入手机号码或名称。
  2. 结果应该返回与下面两个表中的搜索匹配的数据。
  3. 我想JOIN并从 CUSTOMER表ID)和 TASK表({{}返回id的数据{1}})是一样的。

    我的customer_id下面的查询从 TASK表返回正确的任务数据($sql),但它始终返回ID 1当 CUSTOMER表 CUSTOMER表返回ID 5时, CUSTOMER表

    我无法弄清楚我做错了什么?

    我的SQL查询例如:

    [customer_id] => 5

    我的CUSTOMER表信息:

    $sql = ("SELECT * FROM customer, task WHERE customer.id = task.customer_id LIKE 5 "); 
    

    我的任务表信息:

    CREATE TABLE `customer` (
      `id` int(40) NOT NULL AUTO_INCREMENT,
      `name` varchar(40) NOT NULL DEFAULT '',
      `mobil` varchar(20) NOT NULL,
      `email` varchar(50) NOT NULL DEFAULT '',
      `Messages` varchar(200) NOT NULL DEFAULT '',
      `adr` varchar(50) NOT NULL DEFAULT '',
      `zip` int(4) NOT NULL,
      `date_created` date NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;  
    

2 个答案:

答案 0 :(得分:1)

我对这种情况感到惊讶。让我们来看看这个表达式:

customer.id = task.customer_id LIKE 5

请记住,LIKE=都是二元运算符,这只能是两种方式之一:

  1. 首先处理相等,然后将该比较的布尔(0或1)结果与5进行比较。
  2. 首先处理LIKE,然后将task.customer_id LIKE 5的布尔结果与您的customer.id字段进行比较。
  3. According to the docs,这些运算符具有相同的优先级。但是,根据您的结果(id为1的单个记录),看起来第二个选项实际上正在发生。由于task.customer_id的值为5,因此该条件通过; LIKE表达式的布尔结果为1,因此您获得customer.id为1的记录。

    我们可以通过将LIKEAND进行比较来解决此问题。在我们处理它的同时,让我们抛弃过时的A,B连接语法:

    SELECT * 
    FROM customer
    INNER JOIN task ON customer.id = task.customer_id 
    WHERE customer.id LIKE 5
    

答案 1 :(得分:0)

尝试:

SELECT * FROM customer join task on customer.id = task.customer_id where  customer.id  = 5