PHP, SQL, bir kerede 3 tablodan gelen verileri SEÇ?

3 Cevap php

Ben 3 tablo var, 'u' 's', 'd

'U'
var

  • kimliği
  • divid

'D'
var

  • divid
  • divname

'S'
var

  • sname
  • primarykimliği
  • secondaryuserid

Şimdi ne yapmak istiyorum aşağıdaki biçim
sıraları ile bir tablo sergileyebilir edilir

  • kimliği, divname, sname

Artı Userid Bu sname tablo için birincil veya ikincil olup olmadığını çözmek için bir yol bulmalısınız.

Ben bir sol birleşim kullanan kimliği ve divname göstermek mümkün, ama ben üçüncü bir tablo eklemek istiyorum nasıl bilmiyorum? Bu yanıltıcıdır yapmak için, en fazla ~ 20 her kullanıcı'kimliği için fazla 1 snames olabilir. Kullanıcı'kimliği bağlı olarak 0-20 snames, aralarına virgül görüntülemek için bir yolu var mı?

Ne var şu anda sadece ve u ve birbirlerine tekabül eden d masaları.

SELECT
e.userid,
e.divid,
d.divname
FROM
e
LEFT JOIN d ON (e.divid = d.id)
ORDER BY e.kimliği

3 Cevap

Sen tabloları katılmak, ve s iki kere iki olası ilişkileri için yapabilirsiniz:

select 
    u.userid
,   d.divname
,   coalesce(s1.sname, s2.sname)
,   case when s1.sname is not null then 'Primary'
         when s2.sname is not null then 'Secondary'
         else 'None' end
from u
join d on d.divid = u.divid
left join s s1 on s1.primaryuserid = u.userid
left join s s2 on s2.secondaryuserid = u.userid

Virgül adlı ayrılmış 20 kullanıcı adına Görünen iyi PHP, istemci tarafında yapılır. Bu veritabanında bunu yapmak mümkündür, ancak yöntem DBMS bağlıdır. MySQL için, 20 satır bir alt sorgu sınırlayıcı zordur, ama virgülle ayrılmış listeleri oluşturmak kolaydır. Örneğin:

select
    group_concat(coalesce(s1.sname,s2.sname) separator ',')
,   ...
from u
...
group by u.userid

Bir İç katılın ve bir görünümde koydum oluşturun. Sonra biz sadece görünümünde bir seçme yapabilirsiniz.