SQL JOIN получить имя и все теги для элемента - PullRequest
1 голос
/ 22 июля 2010

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

$query = "SELECT categories.id, categories.category, spots.spot_name, spots.category_id, spots.description, spots.slug, districts.id, districts.district, tags.spot_id, tags.tag ".
 "FROM categories, spots, districts, tags ".
    "WHERE categories.id = spots.category_id AND districts.id = spots.district_id AND tags.spot_id = spots.id";

$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

while ($row = @mysql_fetch_array($result)){
echo '<tr><td style="background:#000; color:#ccc;" class="tooltip" title="'.$row["description"].'Tags: '.$row["tag"].'"><a style="color:#fff;" href="/'.$row["slug"].'">'.$row["spot_name"].'</a></td>
<td>'.$row["category"].'</td>
<td>'.$row["district"].'</td>
<td>****</td>
</tr>  
';
}

Спасибо миллион,

Anders

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Вот так ваш запрос выглядит намного лучше:

SELECT c.id, c.category, s.spot_name, s.category_id, s.description, s.slug, d.id, d.district, t.spot_id, t.tag 
  FROM spots AS s
  LEFT JOIN categories AS c ON c.id = s.category_id
  LEFT JOIN districts AS d ON d.id = s.district_id
  LEFT JOIN tags AS t ON t.spot_id = s.id

Чтобы получить все места, которые вы хотели бы выполнить этот запрос:

SELECT c.id, c.category, s.spot_name, s.category_id, s.description, s.slug, d.id, d.district
  FROM spots AS s
  LEFT JOIN categories AS c ON c.id = s.category_id
  LEFT JOIN districts AS d ON d.id = s.district_id

Теперь вы можете перебрать все пятна и получить их метки:

'SELECT t.tag FROM tags WHERE t.spot_id = '. (int)$spot_id
0 голосов
/ 22 июля 2010

Измените свой запрос и добавьте левое объединение следующим образом: $ query = "SELECT c.id, c.category, s.spot_name, s.category_id, s.description,"."s.slug, d.id, d.district, t.spot_id, t.tag".«ИЗ категорий AS c, пятна AS s, районы AS d».Msgstr "ПРИСОЕДИНЯЙТЕСЬ К ТЕГАМ. S.id = t.spot_id"."WHERE c.id = s.category_id AND d.id = s.district_id";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...