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

0

У меня три таблицы: projects, proj_categ и categories.

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

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

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/>";
    }
}

FYI: 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="images/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 но это не работает для меня. Надеясь, что некоторые из вас могут дать мне некоторые советы. Спасибо!

  • 3
    mysql_query() mysql_* устарели, вы действительно должны использовать mysqli_* или PDO. secure.php.net/manual/en/function.mysql-query.php
  • 2
    Попробуй group_concat
Показать ещё 2 комментария
Теги:
join
group-by
grouping

3 ответа

1
Лучший ответ
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;
  • 0
    Пожалуйста, добавьте дополнительную информацию о вашем ответе
  • 0
    Привет спасибо! Я понял. Я отредактировал ваш ответ, потому что вместо заголовка вы должны proj_categ id . Нет title в proj_categ
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.

  • 0
    Привет, спасибо за ваше предложение. Можете ли вы показать, как добавить в group_concat ()? Извините, я не знаком с MySQL.
0
$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'];
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню