<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3896036</guid>
        <pubDate>Fri, 20 Oct 2023 07:04:58 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3896036</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895983'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T10:23:06+03:00">19.10.23, 07:23</time></span><div class='quote '>Похоже без изучения теории не обойтись</div></div><br>
Угу.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895983'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T07:23:06+00:00">19.10.23, 07:23</time></span><div class='quote '>буду читать про EAV до полного просветления</div></div><br>
Особое внимание - области применения и недостаткам, а также альтернативам.]]></description>
        <author>Akina</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3896035</guid>
        <pubDate>Fri, 20 Oct 2023 07:00:10 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3896035</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895977'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T06:44:53+00:00">19.10.23, 06:44</time></span><div class='quote '>Правильно ли я понял предложенный пример?</div></div><br>
В принципе - да. В приведенном тобою коде &quot;заведены&quot; две категории и один пользователь. И пользователю &quot;привязаны&quot; &quot;скилы&quot; по этим категориям.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895977'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T06:44:53+00:00">19.10.23, 06:44</time></span><div class='quote '>Текстовые названия категорий в моём случае не нужны, хорошо бы их избежать.</div></div><br>
Названия категорий - некий аналог названий столбцов &quot;плоской&quot; таблицы. Не нужно этого избегать :) Но если уж избегать по-взрослому, тогда и имена пользователей нужно удалить, хватит их ID :lol: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895977'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T06:44:53+00:00">19.10.23, 06:44</time></span><div class='quote '> и так же не ясно как сделать запрос на выборку пользователя с его данными из неё</div></div><br>
Если честно - проще пареной репы. Но нужно, чтобы ты подумал - это полезно на будущее. Ибо ...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895983'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-19T07:23:06+00:00">19.10.23, 07:23</time></span><div class='quote '>Похоже без изучения теории не обойтись, буду читать про EAV до полного просветления</div></div><br>
Это правильное решение&#33;]]></description>
        <author>Majestio</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895983</guid>
        <pubDate>Thu, 19 Oct 2023 07:23:06 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895983</link>
        <description><![CDATA[RedLight: Похоже без изучения теории не обойтись, буду читать про EAV до полного просветления :thanks:]]></description>
        <author>RedLight</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895982</guid>
        <pubDate>Thu, 19 Oct 2023 07:10:38 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895982</link>
        <description><![CDATA[Akina: Вы задаёте сразу несколько вопросов.<br>
<br>
Первый - как правильно хранить. На этот вопрос уже ответил <strong class='tag-b'>Majestio</strong> - мы имеем типичную M:N связь между пользователями и и данными, и храним в формате, аналогичном EAV.<br>
<br>
Второй - как получить такие данные, если заранее не известно количество данных для одного пользователя. Тут ответ зависит от требуемого формата результата.<br>
<br>
Если он должен быть как показано в первом посте, то решение простое - используем UNION ALL и литералы для фиксации того, из какой таблицы выбраны данные.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">SELECT *</div><div class="code_line">FROM main</div><div class="code_line">JOIN (</div><div class="code_line">&nbsp;&nbsp; &nbsp;SELECT &#39;1&#39; AS source, * FROM slave1</div><div class="code_line">&nbsp;&nbsp; &nbsp;UNION ALL</div><div class="code_line">&nbsp;&nbsp; &nbsp;SELECT &#39;2&#39;, * FROM slave2</div><div class="code_line">&nbsp;&nbsp; &nbsp;UNION ALL</div><div class="code_line">&nbsp;&nbsp; &nbsp;....</div><div class="code_line">&nbsp;&nbsp; &nbsp;) AS slave ON ...</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Сложнее вариант, когда результат должен быть развёрнут в сводную таблицу, т.е. для каждого пользователя в результате должна быть только одна строка. В этом случае задачу решает использование динамического SQL в формате хранимой процедуры.]]></description>
        <author>Akina</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895977</guid>
        <pubDate>Thu, 19 Oct 2023 06:44:53 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895977</link>
        <description><![CDATA[RedLight: Здесь `Data` из `User2Categorу` заменён на `SkillLevel`.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CREATE TABLE `Users`(`Id` INT, `UserName` TEXT);</div><div class="code_line">INSERT `Users`(`Id`, `UserName`) VALUES (1, &#39;Vasily Pupkin&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">CREATE TABLE `Categories`(`Id` INT, `CategoryName` TEXT);</div><div class="code_line">INSERT `Categories`(`Id`, `CategoryName`) VALUES (1, &#39;PHP Developers&#39;), (2, &#39;English Speakers&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">CREATE TABLE `User2Categorу`(`UserId` INT, `CategoryId` INT, `SkillLevel` INT);</div><div class="code_line">INSERT `User2Categorу`(`UserId`, `CategoryId`, `SkillLevel`) VALUES (1, 1, 4), (1, 2, 3);</div></ol></div></div></div></div><br>
Правильно ли я понял предложенный пример?<br>
Текстовые названия категорий в моём случае не нужны, хорошо бы их избежать.<br>
Предложенная `User2Categorу` выглядит как моя таблица `values` и так же не ясно как сделать запрос на выборку пользователя с его данными из неё.<br>
Имя пользователя, в принципе, тоже можно считать текстовыми данными, что бы рассмотреть пример с данными разных типов, так как ещё логин можно добавить, но пока не надо :) Таблица пользователей служебную информацию будет содержать, которая к данным не относится и всегда известны её количество и формат.]]></description>
        <author>RedLight</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895976</guid>
        <pubDate>Thu, 19 Oct 2023 05:55:43 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895976</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895973'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-18T17:03:16+00:00">18.10.23, 17:03</time></span><div class='quote '>но тогда у неё будет фиксированное число столбцов</div></div><br>
Немного неверное проектирование. Лучше, и гораздо проще, поступить вот как, <span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>с учетом</strong></span>:<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=438825&view=findpost&p=3895973'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>RedLight &#064; <time class="tag-quote__quoted-time" datetime="2023-10-18T17:03:16+00:00">18.10.23, 17:03</time></span><div class='quote '>поскольку формат таблиц с данными одинаковый</div></div><br>
Создаем таблицы:<br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Users</span></span> - таблица пользователей с полями Id и UserName<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Categories</span></span> - таблица категорий данных с полями Id и CategoryName<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">User2Categorу</span></span> - таблица данных по категориям с полями UserId, CategoryId, Data<br>
<br>
Все. Теперь можно динамически добавлять категории данных, и можно пользователям &quot;привязывать&quot; данные по категориям.<br>
Другой вопрос - если захочется привязывать данные не одного типа (как сейчас по условию), а разных. Но это уже другой вопрос, требующий дальнейшей доработки. Там возможны варианты.]]></description>
        <author>Majestio</author>
        <category>Базы данных: SQL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895973</guid>
        <pubDate>Wed, 18 Oct 2023 17:03:16 +0000</pubDate>
        <title>Объединение данных из нескольких таблиц в одной.</title>
        <link>https://forum.sources.ru/index.php?showtopic=438825&amp;view=findpost&amp;p=3895973</link>
        <description><![CDATA[RedLight: Есть таблица с множеством пользователей (в примере с одним).<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CREATE TABLE `users`(`id` INT, `name` TEXT);</div><div class="code_line">INSERT `users`(`id`, `name`) VALUES (1, &#39;Vasily Pupkin&#39;);</div></ol></div></div></div></div><br>
Существует неизвестное количество таблиц (в примере две) содержащих данные о пользователе.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CREATE TABLE `values_1`(`user_id` INT, `value_1` INT);</div><div class="code_line">INSERT `values_1`(`user_id`, `value_1`) VALUES (1, 1);</div><div class="code_line">&nbsp;</div><div class="code_line">CREATE TABLE `values_2`(`user_id` INT, `value_2` INT);</div><div class="code_line">INSERT `values_2`(`user_id`, `value_2`) VALUES (1, 2);</div></ol></div></div></div></div><br>
Так можно получить фиксированное количество данных о пользователе.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">SELECT `users`.`name`, `values_1`.`value_1`, `values_2`.`value_2` FROM `users` INNER JOIN `values_1`, `values_2`;</div></ol></div></div></div></div><br>
Но, поскольку формат таблиц с данными одинаковый а их количество заранее не известно, то хотелось бы объединить таблицы с данными в одну, при этом добавив индекс данных (вроде как категория данных из соответствующей индексу таблицы).<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">CREATE TABLE `values`(`user_id` INT, `value` INT, `index` INT);</div><div class="code_line">INSERT `values`(`user_id`, `value`, `index`) VALUES (1, 1, 1), (1, 2, 2);</div></ol></div></div></div></div><br>
Как составить запрос получения данных о пользователе аналогичный предыдущему, но работающий с объединённой таблицей?<br>
<br>
Я понимаю, что все данные можно затолкать вообще в одну таблицу, где будет имя пользователя и все его данные, но тогда у неё будет фиксированное число столбцов, а мне бы хотелось заводить новые категории данных (с новыми индексами) и при этом не трогать структуру таблиц.]]></description>
        <author>RedLight</author>
        <category>Базы данных: SQL</category>
      </item>
	
      </channel>
      </rss>
	