İşte benim masa yapıdır. Ancak, user_emails ile ilişkili olmayan tüm users.id'ler için ilk (en düşük) e-postaları seçmem gerekiyor. mySQL complex SELECT sorgusu?</p> <pre><code>users: id | email emails: id | subject | body user_emails: user_id | email_id </code></pre> <p>Çok basit bir tasarım:
göstermek için: Veri gösterirusers:
id | email
1 | [email protected]
2 | [email protected]
3 | [email protected]
emails:
id | subject | body
1 | sub1 | body1
2 | sub2 | body2
user_emails:
user_id | email_id
1 | 1
1 | 2
2 | 1
gibi:
- Kullanıcı 1 zaten o kullanıcıyı dışlamak gerekir böylece seçme e 1 ve 2'yi aldı.
- Kullanıcı 2 sadece e-posta 1 aldı, bu yüzden kullanıcı 2 ve e-posta 2.
- Kullanıcı 3 tüm e-postaları almadı seçmelidir, bu nedenle kullanıcının seçmelidir 3 ve e-posta 1.
Bunu PHP'de yapacağım, bu yüzden eğer mySQL ile tek başına yapılamazsa, PHP'de herhangi bir mantık yazılmalıdır. peşin
Teşekkür
DÜZENLEME: Muhtemelen kullanıcı kimlikleri binlerce ve e-posta kimliği yılların yüzlerce olacağını belirtmeliyiz. Tüm bu e-postaları gönderecek olan betik günde bir kez yayınlanacak. Yani, bu mümkün olduğunca optimize edilmiş olmalıdır.
SELECT * from users u
LEFT JOIN users_emails e ON u.id=e.user_id
LEFT OUTER JOIN emails m on m.id=1
WHERE e.user_id is NULL
Veya gerekli değildir epostalarda kimliği sorgusu yukarıdaki gibi 1 olmak eğer aşağıda kullanın:
SOL JOIN. –
Ben var ama mySQL ile çok deneyimli değilim ve benim için kafa karıştırıcı. –
Cevabınız böyle yayınlanmalı ve sonra bir cevabı kabul etmelisiniz. :-) –