Ben şimdiye kadar gördüğüm her şey otomatik olarak bir veritabanında yinelenen girdileri kaldırma ile ilgili. Ben veritabanında bu o there is no duplicate data başında vurgulamak istiyorum. Ben de hala çok RDBMS tasarım, normalleşme, ilişkiler, ve, en önemlisi, SQL öğrenmeye olduğum gerçeği ile başlayacağız!
Ben bir ClientID (PK) ve bir CLIENT_NAME ile, müşterilerine bir tablo var. Ben bir roleID (PK) ve bir ROLE_NAME ile, rollerin bir tablo var. Herhangi bir müşteri ile ilişkili birden fazla rolleri olabilir. Yani ClientID ile, bir client_role_link tablo oluşturulur ve iki alanları olarak roleID. Sonra bu çalıştırın:
SELECT client.client_name, role.role_name FROM client
LEFT JOIN client_role_link ON client_role_link.clientid=client.clientid
LEFT JOIN role ON client_role_link.roleid=role.roleid
WHERE (role.roleid='1' OR role.roleid='2')
Yani ben onunla ilişkili iki rol (roller '1 've '2') olan bir müşterim var diyelim. Bu sorgu, iki satır, her rol için birini döndüren. Ben bu sonuçları elde zaman geri bir while
sonuçlarına dolaşmak için döngü ve bir <select>
liste haline çıkış onları kullanıyorum. Daha sonra listede aynı müşteri ile iki <option>
'nin neden oluyor.
Benim sorgu iki satır dönüyor anlıyorum, bu mantıklı. Yani burada iki kat soru geliyor:
- Ben kullanarak gereken iyi bir veritabanı / tablo tasarım, ya da bir daha optimize sorgu var mı?
- Ya da bu ben PHP işlemesi gereken bir şeydir? Eğer öyleyse, dizi üzerinden geri döngü ve çiftleri kaldırarak sonra, bir diziye tüm sonuçlar ekleyerek daha zarif bir çözüm var mı?
Düşünceler?