Вы входите в ту серую область, где могло бы быть лучше постобработать эту внешнюю сторону мир SQL.
, По крайней мере, это - то, что я сделал бы: я был бы просто ORDER BY вместо GROUP BY и цикл через результаты обработать группировку как фильтр, сделанный на клиентском языке:
last_id
к ПУСТОМУ УКАЗАТЕЛЮ , Если идентификатор строки отличается, чем last_id
, запускают новую выходную строку:
a., если last_id
не является ПУСТЫМ тогда, производят сгруппированную строку
, b. устанавливают новую сгруппированную строку = входная строка, но хранят имя как единственный массив элемента
, c. устанавливают last_id
на значение текущего идентификатора
Иначе (идентификатор совпадает с last_id
), добавляют название строки на существующую сгруппированную строку.
last_id
не является ПУСТЫМ, тогда производит существующую строку группы. Тогда Ваш вывод заканчивается включая имена, организованные как массив, и может решить, как Вы хотите обрабатывать/выходить/форматировать их тогда.
, Какой язык/систему Вы используете? PHP? Perl? Java?
MySQL (или SQL Server, Oracle, DB2 и т. Д.) - это механизмы баз данных: это особые приложения, которые были созданы для хранения и обработки данных и очень хороши в этом; они также могут работать на сервере, отличном от того, на котором находится ваша основная программа, что позволяет распределять нагрузку.
XML-файлы - это просто текстовые файлы, хранящиеся на вашем или другом компьютере; они должны быть прочитаны, проанализированы и записаны, и только ваша программа может это сделать. Они также очень, очень неэффективны из-за своей текстовой природы: чтение и анализ текстового файла происходит очень медленно, а его изменение еще хуже.
XML-файлы хороши для хранения настроек конфигурации и передачи данных между различными системами, но хранение и обработка данных обязательно должны осуществляться в соответствующей СУБД.
Кроме того, обязательная ссылка на Джоэла Спольски .
Это больше похоже на вопрос StackOverflow , а не на вопрос ServerFault. В любом случае ..
Если вам нужен произвольный доступ к элементам данных, используйте настоящую базу данных. Если вы просто выполняете пакетную обработку или что-то в этом роде, xml будет работать, но и для этого подойдет и база данных.
Если вам не нужно хранить данные с реляционными свойствами, вы можете попробовать хранилище ключ / значение, или база данных, ориентированная на документы, вместо СУБД, для лучшей производительности / масштабируемости в обмен на меньшее количество функций.
Это во многом зависит от того, какие данные вы хотите сохранить. Если вы храните в основном документы, ориентированные на документы, XML может быть хорошим выбором. Если вы храните множество небольших иерархий, XML, вероятно, лучше, чем SQL. Время на чтение и синтаксический анализ файла XML определенно больше, чем время, необходимое для получения простого запроса из базы данных. Но если у вас есть данные, которые естественным образом не помещаются в базу данных, стоимость запроса может резко возрасти и фактически превратиться в нечто большее, чем просто использование файлов XML.
Еще один вариант, который вы можете попробовать, - это использование базы данных XML, например Xindice ( http://xml.apache.org/xindice/ ). Базы данных XML не так широко используются в настоящее время, в основном потому, что у нас нет хороших математических теорий относительно иерархических баз данных. Но они могут быть действительно полезны, если у вас есть нужная проблема ...
Подумайте, есть ли у вас XML-документ с вложенным элементом person, который содержит информацию о каждом из ваших пользователей, и у вас есть 3000 пользователей. Если вы хотите получить информацию для одного человека, вам придется проанализировать этот огромный файл, чтобы найти информацию об этом человеке. Вы могли бы использовать какой-нибудь умный поиск, чтобы прыгать по файлу, но в конечном итоге будет много последовательного доступа.
В базе данных у вас обычно есть индексы, которые позволят вам очень быстро выполнять поисковые задачи, подобные приведенным выше . В приведенном выше сценарии поиск человека в индексированной таблице, вероятно, будет примерно в 100 раз быстрее.
Большинство крупных сайтов используют такие базы данных, как MySQL.
Самый важный вопрос, на который вам нужно ответить, - это то, как вы хотите получить доступ к своим данным. Если вы хотите, чтобы многие люди просматривали информацию много раз в секунду (например, популярный веб-сайт), используйте базу данных, такую как mysql.
Я полагаю, что более вероятно, что они используют полноценную СУБД в качестве резервного хранилища и только генерируют / анализируют XML в качестве интерфейса.
XML, imho, слишком тяжел для использования в базе данных с большим объемом данных.
Структура слишком сложна для синтаксического анализа, и даже если бы у вас был какой-то сервер, который запускался, анализировал и затем запускал на основе данных XML, время инициализации было бы убийственным, как и этап повторной сериализации данных каждый раз запись была выполнена.
Преимущество РСУБД в том, что она имеет гораздо более эффективное хранилище упакованных данных с предсказуемым поиском / поиском по записям и множественным хранилищам данных и множеству индикаторов.
Я знаю, что это немного глупо. Если я хочу хранить большой объем данных. Что мне следует использовать: xml или базу данных (mysql)?
Прежде всего, XML
по своей природе иерархический , а MySQL
- реляционный .
Если вы сохраните свои данные как XML
документ:
<customer>
<address/>
<address/>
</customer>
, очень легко получить все адреса клиента, но не так просто получить клиентов для данного адреса.
Во-вторых, XML
более ориентирован на пользователя. Вы можете легко редактировать его в своем любимом текстовом редакторе. В MySQL
это не так просто.
Учитывая все вышесказанное, если ваши данные иерархичны, имеют небольшой размер и вам нужно, чтобы их можно было легко редактировать без внешнего интерфейса, используйте XML
.
Markmail.org может вас удивить - это магазин xml.
Прочтите, Рон Беррет ( http://www.rpbourret.com/xml/XMLAndDatabases.htm ]) - отличный источник по этой теме.
XML - это не база данных, это формат файла (или, точнее, формат входного или выходного потока). Он позволяет вам определять свой собственный формат, используя элементы синтаксиса XML, а затем вы можете, например, преобразовать свой объект памяти в поток XML и сохранить его на диск.
mySQL - это программный продукт, который принадлежит к классу продуктов, называемых СУБД (система управления базами данных). СУБД управляют вашими данными и предоставляют различные возможности хранения, поиска, индексации, запросов и транзакций.
Вам нужно решить, нужен ли вам формат файла или система управления. В зависимости от этого вы можете выбрать XML (или какой-либо другой формат, например, JSON или текстовый файл) или mySQL (или другую реляционную СУБД, например MS SQL Server или Oracle, или даже нереляционную СУБД). .