Как преобразовать столбец, разделенный запятыми, в строки и добавить счетчик

У меня есть таблица с этими значениями

Таблица : Документы

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

Мне нужен такой результат. Где идентификатор = 5

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

Где идентификатор = 4

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

Видите ли, мне нужно взорвать столбец, разделенный запятыми, и подсчитать, сколько там значений. Мне не нравится эта схема, но я работаю над существующим проектом и не могу его изменить. Мне нужен счетчик для отображения в пользовательском интерфейсе. Так что счетчик тоже нужен. Как я могу это сделать? Также я не могу сделать это на стороне php, потому что я использую pyrocms, и мне нужно отобразить его с помощью этапа pyrocms, который не позволяет мне использовать php в представлениях.


person Muhammad Raheel    schedule 06.01.2013    source источник


Ответы (3)


Посмотрите на этот SQL FIDDLE , возможно, это то, что вам нужно. Вы должны использовать вспомогательную таблицу 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 <> ''
person Hamlet Hakobyan    schedule 06.01.2013
comment
Спасибо это именно то, что мне нужно. - person Muhammad Raheel; 06.01.2013
comment
Таблица последовательности? - person Keyur Shah; 20.10.2016

используя хранимые процедуры, вы можете решить свою проблему. вот точный дубликат< /strong> вашей проблемы уже решена

person mamdouh alramadan    schedule 06.01.2013

Я боюсь, что нет простого способа создать SQL-запрос, также нет доступной функции разделения.

Что вы можете сделать, так это создать свою собственную функцию, как описано здесь

Вы также можете обрабатывать результаты непосредственно в php-коде.

person zibi    schedule 06.01.2013