Dizeleri Yarma ve çiftleri katılmadan

1 Cevap php

Ben, bir seçme kutusu bir bükülme ile açılır oluşturmak için çalışıyorum

Temelde bu bir öğe listesinden seçildiğinde, bir metin alanına eklemek gerekir ki bir Ajax şeklidir. Ancak ben de burada birkaç ekstra seçimleri eklemek istiyorum.

Ben alıyorum dize oluşur COMPANY _ SITE _ DEPARTMENT {[(5) }].

PHP Kullanımı Ben içerebilir logintags tabloda veritabanından her öğe almak isteyen birden fazla COMPANY _ bu yüzden devletler bir şey SDGCC Ben kutu açılır istiyorum eğer mantıklı all SDGCC sitelerini eklemek için özel bir seçim var? Ben bunu denedim ama SDGCC etiketini içeren birden fazla satır varsa ben çoğaltır.

çiftleri:

SDGCC_NEWTOWN_INBOUND
SDGCC_NEWTOWN_QH
SDGCC_BOLTON_QH
ARISE_HOME_ORDERS
ARISE_HOME_ENQUIRIES

vs ..

Yani temelde tüm SDGCC siteleri seçmek için bir seçenek olurdu ama bu veritabanı herhangi bir noktada değiştirebilir çünkü biz sadece bölümleri seçin kutusunda (bir kez) göstermek (yani SDGCC, ORTAYA) dizenin ilk parçası gerekir.

Şu anda aşağıdaki önerilen bir sorguyu çalışıyorum

SELECT DISTINCT SUBSTRING( tag, 0, LOCATE('_', tag ) ) FROM dept_logintags LIMIT 0 , 30

Ancak bu hiçbir satır döndürür

1 Cevap

Don't reinvent the wheel

Temelde ne istediğiniz logintags bir COMPANY_ bölümünde bir farklıdır.

Neden olarak DB veri okumaz DISTINCT? Kolayca ilk bölümünü soyarak sizin sorguda bir ifade sütunu kullanarak dize değeri ilk bölümünde bir DISTINCT yapabilirsiniz. Yani hiç orta katman üzerinde herhangi bir dize işleme gerek değil mi?

Example for Microsoft SQL

// first part
SELECT DISTINCT SUBSTRING(tag, 0, CHARINDEX(tag, '_')) FROM dept_logintags
// second part
SELECT DISTINCT SUBSTRING(SUBSTRING(tag, CHARINDEX(tag, '_') + 1, LEN(tag)), 0, CHARINDEX(tag, '_')) from dept_logintagss
// last part
SELECT DISTINCT SUBSTRING(SUBSTRING(tag, CHARINDEX(tag, '_') + 1, LEN(tag)), CHARINDEX(tag, '_') + 1, LEN(tag)) from dept_logintags

Sonunda size PHP aynı şeyi yapmak istiyorum çünkü.

Example for MySQL

MySQL hatta daha da seçer basitleştirmek için SUBSTRING_INDEX işlevini kullanabilirsiniz

// first part
SELECT DISTINCT SUBSTRING_INDEX(tag, '_', 1) FROM dept_logintags
// second part
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(tag, '_', 2), '_', -1) from dept_logintags
// last part
SELECT DISTINCT SUBSTRING_INDEX(tag, '_', -1) FROM dept_logintags