Извлечение данных из связанной таблицы токси - PullRequest
0 голосов
/ 01 августа 2011

Я получаю свои данные для части моего сайта с помощью типичного запроса MySQL и выводит результаты из различных полей и т. Д. Из моей основной таблицы, структура которой не важна, но которая имеет уникальный идентификатор, который называется 'job_id'

Чтобы иметь несколько категорий, связанных с этим «job_id», я использовал решение токси, которое связывает категории с каждым «job_id».

TABLE `tags` (
`tag_id` INT NOT NULL AUTO_INCREMENT, 
`tag_name` VARCHAR(20) NOT NULL, 
PRIMARY KEY (`tag_id`)
)

CREATE TABLE `tag_relational` (
`job_id` INT NOT NULL, 
`tag_id` INT NOT NULL
)

Что я хочу сделать, это когда яВывести информацию из основной таблицы (используя 'job_id'). Я также хочу отобразить все категории, с которыми сопоставлен этот job_id.

Запрос ниже возвращает только первую категорию (tag_name), которой является job_idуказаны в списке, когда их должно быть до шести (на данный момент):

$query = "SELECT * FROM tags t
JOIN tag_relational r   
ON t.tag_id=r.tag_id
WHERE r.job_id = $job_id";

$result=mysql_query($query) or die(mysql_error());
$cats=mysql_fetch_assoc($result);

В моем коде я использую это для вывода соответствующих категорий:

<?php echo $cats['tag_name'];?>

Можеткто-нибудь объяснить, как я могу получить ВСЕ имена катагорий, а не только первые?Спасибо Дэн

Кстати, извинения мю слишком коротка , который любезно ответил на мой вопрос, когда у меня была фиктивная / менее полная информация выше.

1 Ответ

0 голосов
/ 01 августа 2011

Если вы просто хотите перечислить названия категорий, вы можете использовать group_concat вроде этого:

select b.*,
       group_concat(c.category_name order by c.category_name separator ' ,') as cats
from business b
join tbl_works_categories w on b.id = w.bus_id
join categories c on w.category_id = c.category_name
where ...
group by b.id

Вам, конечно, понадобится правильное предложение WHERE. Это даст вам обычный материал из business и имена категорий в виде списка с разделителями-запятыми в cats.

Если вам также нужны идентификаторы категорий, то лучше использовать два запроса: один для получения информации business, а второй для сбора категорий:

select w.bus_id, c.category_id, c.category_name
from tbl_works_categories w
join categories c
where w.bus_id IN (X)

, где X - это список значений business ID, разделенных запятыми. Тогда вы исправите все на стороне клиента.

...