0

ひねりを加えた選択ボックスのドロップダウンを作成しようとしていますが、

基本的に、これはAjaxフォームであり、リストからアイテムを選択すると、テキストフィールドに追加されます。ただし、ここにいくつかの選択肢を追加したいと思います。

私が取得している文字列は、たとえばで構成されています。COMPANY_SITE_DEPARTMENTSDGCC_NEWTOWN_INBOUND

PHPを使用して、logintagsテーブルのデータベースからすべてのアイテムを取得したいので、それが理にかなっている場合は、ドロップダウンボックスにすべてのサイトを追加するための特別な選択を含めることができますか?試しましたが、タグを含む行が複数あると重複します。COMPANY_SDGCC SDGCCSDGCC

重複:

SDGCC_NEWTOWN_INBOUND
SDGCC_NEWTOWN_QH
SDGCC_BOLTON_QH
ARISE_HOME_ORDERS
ARISE_HOME_ENQUIRIES

等...

つまり、基本的にすべてのSDGCCサイトを選択するオプションがありますが、そのデータベースはいつでも変更される可能性があるため、文字列の最初の部分(つまり、SDGCC、ARISE)セクションを選択ボックスに(1回)表示するだけで済みます。

私は現在、以下から提案されたクエリを試しています

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

ただし、これは行を返しません

4

1 に答える 1

4

車輪を再発明しないでください

基本的に、あなたが望むのは、COMPANY_ログインタグの一部です。

DB からデータを として読み取ってみませんDISTINCTか? DISTINCT最初の部分を削除する式列をクエリで使用することにより、文字列値の最初の部分を簡単に作成できます。では、中間層での文字列操作はまったく必要ありませんか?

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

結局、PHP で同じことをしたいからです。

MySQL の例

MySQL では、SUBSTRING_INDEX 関数を使用して選択をさらに簡素化することもできます

// 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
于 2009-09-25T08:41:50.183 に答える