我在ps_shop表中有多个商店,它的一些商店在ps_storeinfo表中,但那些ps_shop表中的商店不在ps_storeinfo表中,需要插入到ps_storeinfo中的用户id和商店名称。这里ps_shop表的店名= ps_storeinfo表中的storename。在这里,我已经为此编写了sql查询,我正在获取所有数据,但问题是,如果我的SQL有多个用户,则会有多个用户访问。我需要一个用户的一个商店。
在ps_ employee_shop表中,根据商店id为商店分配用户。而在ps_ employee表中则是为用户准备的。这是针对prestashop 1.6的。
我的SQL如下所示:
$table_prefix = _DB_PREFIX_;
'SELECT ps.*, pe.email, pe.firstname, pe.lastname, pes.id_employee,psi.storename
FROM '.$table_prefix.'shop ps
LEFT JOIN '.$table_prefix.'storeinfo psi ON ps.name = psi.storename
INNER JOIN '.$table_prefix.'employee_shop pes ON ps.id_shop = pes.id_shop
INNER JOIN '.$table_prefix.'employee pe ON pes.id_employee = pe.id_employee where ps.id_shop <>1 and pe.id_employee <>1
GROUP BY pes.id_employee
';输出图像为:

发布于 2017-01-21 15:10:58
如果JOIN右侧的表中存在多个具有匹配ON键的实体,则任何关系数据库引擎都将为右侧的每个匹配实体返回一行,复制JOIN子句的左侧。
在所描述的场景中,您需要决定要返回哪个用户。第一个是按字母顺序排序的?最近创建的那个?
根据答案,您需要将连接与相关子查询一起使用。下面是获取id_employee值最高的员工的示例
SELECT
ps.*, pe.email, pe.firstname, pe.lastname, pes.id_employee,psi.storename
FROM
'.$table_prefix.'shop ps
LEFT JOIN '.$table_prefix.'storeinfo psi ON ps.name = psi.storename
INNER JOIN (
SELECT
pe.email, pe.firstname, pe.lastname, pes.id_employee
FROM
'.$table_prefix.'employee pe
'.$table_prefix.'employee_shop pes ON pes.id_employee = pe.id_employee
WHERE
pe.id_employee <> 1
AND ps.id_shop = pes.id_shop
ORDER BY
pe.id_employee DESC
LIMIT 1
)
WHERE
ps.id_shop <>1正如您可以看到的,这实际上是将生成的员工列表限制为只有一条记录,以避免重复。在本例中,列表是按id_employee排序的,但正确的排序取决于需要实现的业务逻辑。
https://stackoverflow.com/questions/41776531
复制相似问题