2017-01-21 36 views
0

我在ps_shop表中的多個商店和一些商店在ps_storeinfo表,但表ps_shop這些店都沒有在需要插入到ps_storeinfo與用戶ID和店鋪名稱ps_storeinfo表。這裏的店名爲ps_shop table = storename在ps_storeinfo表中。在這裏我已經爲此寫了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 
     '; 

輸出圖像:

enter image description here

+0

只需添加「按商店主鍵」即可應用 –

+0

謝謝你。你的建議正在起作用。 –

+0

我已通過此編輯更正了此問題的格式。 – mertyildiran

回答

0

好吧,如果一個以上的實體在表中存在的JOIN右側與匹配ON鍵任何關係數據庫引擎都會爲右側的每個匹配實體返回一行,並複製JOIN子句的左側。

在描述的場景中,您需要決定要返回哪個用戶。第一個按字母順序排序?最近創建的那個?

根據答案,您將需要使用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排序,但正確的排序取決於需要實現的業務邏輯。

+0

老闆不工作........... –

相關問題