Intereting Posts
preg_replace только теги OUTSIDE? (… мы не говорим о полном «анализе html», просто немного уценке) Класс javascript для FileReader, не работающий с IE Удалите некоторую информацию в переменной json с php Являются ли названные объекты в HTML все еще необходимыми в эпоху браузеров, поддерживающих Unicode? WORDPRESS: отображение списка подкатегорий и сообщений, которые они содержат, в пределах одной основной категории Какие шаблоны я мог бы использовать в коде, чтобы упростить перевод на другой язык программирования? PHPUnit, посмеянные интерфейсы и instanceof Изменение значения текстового поля с помощью раскрывающегося списка, выбранного в php и mysql php – невозможно получить дату на немецком языке Разница между временем () и новым MongoDate ()? не может хранить значения в memcache Как заливать кадр с помощью изображения шаблона с использованием класса php imagick? Как считывать данные из памяти телефона с помощью Google Почему cron не выполнит мой PHP-скрипт правильно? 2 языка на веб-сайте, используя php

Имитировать многомерный массив в MySQL

У меня есть две таблицы с такой структурой:

статьи: article_id, текстовые теги: tag_id, article_id, текст

Как я могу выбрать все статьи и все связанные теги с одним запросом? Как я знаю, MySQL может возвращать только двумерный массив, поэтому я могу решить одно из следующих способов: объединить все теги в столбец результата выбора статей. Но как?

Solutions Collecting From Web of "Имитировать многомерный массив в MySQL"

Взгляните на функцию Group_Concat MySQL. Вы можете написать что-то вроде

Select A.article_id, A.text GROUP_CONCAT(B.Text) As Tags From articles A Left Outer Join tags B Using (article_id) Group By A.article_id, A.Text 

Как упоминает Unreason в своем ответе, это следует использовать только в том случае, если вы хотите отображать данные, и я предложил его, потому что вы упомянули о конкатенации тегов в вопросах. Если вам нужно работать с датой, используйте простое соединение, как предложил fabrik.

Реляционные данные организованы в кортежах. Кортежи имеют n измерений и могут легко описывать функциональные отображения из m-мерных векторов в скалярные или k-мерные значения с одним отношением (таблицей). (n = m + k)

Если то, что вам нужно / предлагать, предназначено только для уровня презентации, вы можете делать то, что предлагает Эрик Хог, но если это где-то в середине процесса или в начале другого процесса, то предложение Фабрика – это правильный способ.

GROUP_CONCAT делает данные не реляционными и, следовательно, гораздо сложнее использовать в качестве основы для последующей обработки SQL. Таким образом, цель этой команды – сделать выходную информацию, если ваш клиентский уровень не сможет сделать это за вас. Не пытайтесь моделировать свои основные отношения в соответствии с проблемами презентации.

 SELECT * FROM articles LEFT JOIN tags ON article.article_id = tags.article_id 

Если вы сортируете по статье, то вы создаете представление данных, пропуская атрибуты статьи, связанные с повторяющимся идентификатором статьи, или просто перезапишите их:

 // select a.article_id, a.text, b.tag_id, b.text as tag_text // from articles a, tags b // where a.article_id=b.article_id $articles=array(); while ($r=mysql_fetch_assoc($result)) { $article[$r['article_id']=array( 'text'=>$r['text']; ); @if (!is_array($article[$r['article_id']]['tags'])) { $article[$r['article_id']]['tags']=array(); } $article[$r['article_id']]['tags'][$r['tag_id']]=$r['tag_text']; }