1

私はこれらの値を持つテーブルを持っています

表:ドキュメント

id  |       document
----|-------------
1   |   doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
2   |   doc.txt 
3   |   doc.txt , doc1.txt 
4   |   doc.txt , doc1.txt , doc2.rtf 
5   |   doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
6   |   doc.txt , doc1.txt , doc2.rtf , doc3.docx 
7   |   doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
8   |   doc.txt , doc1.txt , doc2.rtf 
9   |   doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
10  |   doc.txt , doc1.txt 

SQL FIDDLE SCHEMA

このような結果が必要です。ここで、id = 5

Counter |   docs
    ----|-----------
    1   |   doc.txt
    2   |   doc1.txt
    3   |   doc2.rtf
    4   |   doc3.docx
    5   |   doc4.doc

ここで、id = 4

Counter |   docs
    ----|-----------
    1   |   doc.txt
    2   |   doc1.txt
    3   |   doc2.rtf

カンマで区切られた列を展開して、そこにある値の数を数える必要があることがわかります。このスキーマは好きではありませんが、既存のプロジェクトに取り組んでおり、変更できません。ユーザーインターフェイスに表示するにはカウンターが必要です。ですから、カウンターも必要です。どうやってやるの?また、pyrocmsを使用していて、ビューでphpを使用できないpyrocms tageを使用して表示する必要があるため、php側では実行できません。

4

3 に答える 3

2

このSQLFIDDLEを見てください、多分それはあなたが望むものです。ヘルパーテーブルを使用する必要がありますsequence

SELECT * FROM
(SELECT S.Id Counter,
REPLACE(SUBSTRING(SUBSTRING_INDEX(document, ' , ', S.Id),
       LENGTH(SUBSTRING_INDEX(document, ' , ', S.Id - 1)) + 1),
       ' , ', '') docs
FROM documents D, sequence S
WHERE D.id = 3) A
WHERE A.docs <> ''
于 2013-01-06T17:30:11.263 に答える
2

ストアドプロシージャを使用すると、問題を解決できます。これはすでに解決された問題正確な複製です

于 2013-01-06T17:31:18.047 に答える
0

SQLクエリを作成する簡単な方法はなく、分割関数も利用できません。

ここで説明するように、独自の関数を作成することができます。

結果をphpコードで直接処理することもできます。

于 2013-01-06T17:14:42.077 に答える