我做了一个搜索字段,它发送2个值:
这两个字段都是必填且唯一的。电话号码在表A中,汽车注册号在表2中。这些表在PersonID上联接。这是表1的主要和唯一性。并且在表2中不是主要和唯一的,但值相同。
我正在使用SELECT来确保匹配,如果电话号码和汽车登记号码不属于同一个人,我将回显插入的数据不正确。
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'
几个要点:
在选择中,并不总是必需的,但是用表前缀指定列是一个好主意。如果名称在表之间不冲突,则数据库只能处理名称,但是使用前缀future可以防止查询受到将来可能会破坏名称的某些更改的影响。
在JOIN中,我们必须指定如何联接两个表
另外,对于联接,由于我们需要匹配两个表中的值,因此将其设置为INNER JOIN。即使我们将其设为外部联接,但无论如何,将WHERE中的两个表都包括在内都将成为隐式内部联接。
在WHERE中,我们使用equals运算符(而不是LIKE)。我们关心的是特定的值,而不是某些与模式匹配的值。
同样在WHERE中,如果我们正在比较的字段是字符数据,则值必须用单引号引起来。我不知道您的数据类型,因此这可能不适用。
我认为您应该执行的操作-尝试使用硬编码值(如上面的值)构建查询并使其正常工作。然后,介绍您的变量值并从那里开始。最后,使用参数(如您的第二个示例中一样)来避免sql注入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句