У меня три таблицы: 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/>";
}
}
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
но это не работает для меня. Надеясь, что некоторые из вас могут дать мне некоторые советы. Спасибо!
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;
proj_categ id
. Нет title
в proj_categ
Почему вы не используете только один запрос?
$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.
$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'];
}
}
mysql_query()
mysql_*
устарели, вы действительно должны использоватьmysqli_*
или PDO. secure.php.net/manual/en/function.mysql-query.php