Объединить повторяющиеся значения

У меня есть три таблицы: projects, proj_categ а также categories,

projects(id, title)
proj_categ(id, proj_id, categ_id)
categories(id, title)

Таблица proj_categ соединяет две таблицы (projects а также categories) как показано ниже. Один проект может иметь одну или несколько категорий.
введите описание изображения здесь

PHP & MySQL

$projects = mysql_query("SELECT * FROM projects");

while($projrow=mysql_fetch_array($projects))
{
$projid = $projrow['id'];

$categories= mysql_query("SELECT * FROM categories JOIN proj_categ ON categories.id=proj_categ.categ_id where proj_id='".$projid."'");

while($caterow=mysql_fetch_array($categories))
{
echo $caterow['title']." ";
echo $projrow['title']."<br/>";
}
}

К вашему сведению: HTML-код

$caterow['title'] быть вставленным в <li class="gallery-item Singapore Indonesia">
$projrow['title'] быть вставленным в <span class="title">Title</span>

<li class="gallery-item Singapore Indonesia">
<div class="gallery-contents">
<div id="id1" class="thumbnail gallery-trigger">
<span>
<span class="title">Title</span>
<img src="https://web-answers.ru/wp-content/uploads/2019/02/project.jpg" alt="" />
</span>
</div>
</div>
</li>

Результат

    projects.title |categories.title
+---------------+-----------------
"Testing 1"    |   "Singapore""Testing 2"    |   "Malaysia""Testing 3"    |   "Indonesia""Testing 4"    |   "Singapore""Testing 4"    |   "Malaysia""Testing 5"    |   "Singapore""Testing 5"    |   "Malaysia""Testing 5"    |   "Indonesia""Testing 6"    |   "Indonesia""Testing 7"    |   "Malaysia""Testing 7"    |   "Indonesia"

Что я хочу

Я не хочу повторный проект, я хочу объединить один и тот же проект, но с разными категориями. Пытался GROUP BY но это не работает для меня. Надеюсь, что некоторые из вас могли бы дать мне несколько советов. Спасибо!

0

Решение

SELECT GROUP_CONCAT(categories.title) as "categories.title",
proj_categ.title as "projects.title"FROM categories
JOIN proj_categ ON categories.id=proj_categ.categ_id
WHERE proj_id=$projid
GROUP BY proj_categ.title;
1

Другие решения

Почему вы не используете только один запрос

$projects = mysql_query("SELECT projects.title as proj_title,categories.title as cat_title  FROM projects JOIN proj_categ ON projects.id=proj_categ.proj_id JOIN categories ON categories.id=proj_categ.categ_id");

while($projrow=mysql_fetch_array($projects))
{
echo $projrow['proj_title']." ";
echo $projrow['cat_title ']."<br/>";
}

Также mysql_ * устарела и удалена из PHP 7 mysqli_ * или PDO.

1

$res = array();

$projects = mysql_query("SELECT * FROM projects");

while($projrow=mysql_fetch_array($projects))
{
$projid = $projrow['id'];

$res[$projid] = array('title' => $projrow['title'], 'categories' => array());

$categories= mysql_query("SELECT * FROM categories JOIN proj_categ ON categories.id=proj_categ.categ_id where proj_id='".$projid."'");

while($caterow=mysql_fetch_array($categories))
{
echo $caterow['title']." ";
echo $projrow['title']."<br/>";

$res[$projid]['categories'][] = $caterow['title'];
}
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector