我有两张桌子“人员”和“电子邮件”。一个人可以有多封电子邮件,一封电子邮件可以与多个人关联:

    Personne
+-------------+--------------+
| idPers      | int(10)      |
| ...         | ...          |
+-------------+--------------+
    email
+-------------+--------------+
| idEmail     | int(10)      |
| ...         | ...          |
+-------------+--------------+

然后我在两者之间建立了一座桥梁:
 pers_email
+-------------+--------------+
| id          | int(10)      |
| idPers      | int(10)      |
| idEmail     | int(10)      |
+-------------+--------------+

我想得到所有与一个人相关的电子邮件,我一直在使用这段代码:
$q='SELECT *
from AERA.pers_email , AERA.email
join AERA.email e on e.idEmail = pers_mail.idEmail
where pers_email.idPers = '.$idPers;

$query = $linkpdo->prepare($q);
$query->execute();
$email = $query->fetchAll();

但我不能让它工作,它不断地抛出各种各样但含糊不清的错误,例如:
1054未知列“pers\u mail.idEmail”在“on”子句中
有人能告诉我哪里出错了吗?
谢谢!

最佳答案

您有pers_mail.idEmail,您应该有pers_email.idEmail,并且您应该只内部连接一次,您所拥有的将执行交叉连接,然后再次连接,这可能会产生不需要的结果。试试这个

$q='SELECT *
from AERA.pers_email
inner join AERA.email e on e.idEmail = pers_email.idEmail
where pers_email.idPers = '.$idPers;

另外,将$idPers附加到sql可能会暴露给sql注入。

关于php - 多对多加入Php/mysql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36722680/

10-13 21:43