将 JOIN 与多个 LIKES 结合使用

Using JOIN with multiple LIKES

我创建了一个发送 2 个值的搜索字段:

  1. Phone个数
  2. 车牌号

这两个字段都是必填且唯一的。 Phone号码在table A,车牌号在table 2.table加入PersonID。 table 1 是主要且唯一的。在 Table 2 中不是主要且唯一的,但值相同。

我用的是SELECT,为了确定,这是匹配的,如果phone号码和车牌号码不属于同一个人,我会回显插入的数据不正确。

SELECT * 
FROM Person 
LEFT OUTER JOIN Car on Car.PersonID 
WHERE Phonenumber LIKE ".$_POST['phonenumber']." AND 
WHERE Carregnumber LIKE ".$_POST['carregnumber'].";

这不会给我任何结果。

我也试过:

SELECT * 
FROM Person 
WHERE Phonenumber LIKE ".$_POST['phonenumber']." 
LEFT OUTER JOIN Car on Car.PersonID 
WHERE Carregnumber LIKE ".$_POST['carregnumber'].";

两个字段都是用$_POST定义的。当我只使用:SELECT * FROM Person WHERE Phonenumber LIKE ".$_POST['phonenumber']." 它会给我结果。

我对 JOINS 有点陌生,我已经通过一些教程了解了 INNER、OUTER 和 LEFT JOINS 之间的区别。所以我不确定我是否做得好(好吧,我猜不是,否则我会得到数据)

我的方向是否正确,或者我是否必须使用我在 Stack Overflow 上找到的类似查询:

SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
FROM (SELECT * FROM flights
    INNER JOIN airports
    ON flights.fairport = airports.code
    WHERE (airports.code = '?' OR airports.city='?')) AS matches
INNER JOIN airports
ON matches.tairport = airports.code
WHERE (airports.code = '?' OR airports.city = '?')

我已尝试根据自己的情况编辑上述查询,但结果也是空白。

编辑:感谢评论,我调整了我的查询:

SELECT *
FROM Person
INNER JOIN Car on Car.PersonID = Person.PersonID 
WHERE BSNNummer = ".$_POST['phonenumber']."
AND Kenteken = ".$_POST['carregnumber']."

这个查询仍然给我空白结果,我已经按照评论中的说明进行操作,我知道我做错了什么,但不幸的是,我的查询看起来仍然不完整。

我要把我上面的一些评论放到这里的答案中,这样我就可以提供更多格式等...

针对您要执行的操作的格式正确的查询可能如下所示:

SELECT
    Person.PersonID
    , Person.Phonenumber
    , Car.Carregnumber
FROM
    Person INNER JOIN
    Car ON Person.PersonID = Car.PersonID
WHERE
    Person.PhoneNumber = '123-456-7890'
AND Car.Carregnumber = '123456'

几个要点:

  1. 在 select 中,并非总是必要,但最好指定带有 table 前缀的列。如果名称在 table 之间不冲突,数据库可以只处理名称,但是使用前缀可以使您的查询在将来不受某些可能破坏它的更改的影响。

  2. 在 JOIN 中,我们必须指定如何连接 tables

  3. 还有连接,因为我们需要匹配来自两个 table 的值,所以我们将其设为 INNER JOIN。即使我们将其设为外连接,在 WHERE 中包含两个 table 也会进行隐式内连接。

  4. 在 WHERE 中,我们使用等号运算符(不是 LIKE)。我们关心的是一个特定的值——而不是某物是否匹配某种模式。

  5. 同样在WHERE中,如果我们比较的字段是字符型数据,则值需要用单引号括起来。我不知道你的数据类型,所以这可能不适用。

我认为您应该做什么 - 尝试使用硬编码值(如上面的那个)构建一个查询并使其正常工作。然后,介绍您的变量值并从那里开始。最后,使用参数(就像在你的第二个例子中一样)来避免 sql 注入。