Данные из 2-х таблиц в <select ... multiple> <option>

Yura

Новичок
Данные из 2-х таблиц в <select ... multiple> <option>

Есть 2 таблицы tbl_folders и tbl_r_f. В таблице tbl_folders есть поля f_name и f_id, в таблице tbl_r_f - id_folder. Есть и другие поля, но для этого запроса, жумаю, они не нужны.
Нужно вывести в <select name=folderOfReport[] multiple> .... </select> все данные f_name, а если tbl_folders.f_id=tbl_r_f.id_folder, то в <option> должно стоять selected.
Не могу сообразить, как в данном случае правильно написать запрос к двум таблицам.
 

Фанат

oncle terrible
Команда форума
tbl_folders.f_id=tbl_r_f.id_folder означает, что в tbl_r_f встречается хоть раз id_folder?
 

Yura

Новичок
Автор оригинала: Фанат
tbl_folders.f_id=tbl_r_f.id_folder означает, что в tbl_r_f встречается хоть раз id_folder?
Может я не совсем правильно описал задачу. f_name - название категории, f_id - id категории, id_folder - тоже id категории. Только данные в option должны быть выделены (т.е., selected), если f_id=id_folder.
При добавлении в базу отчета определенной категории добавляются данные в таблицу tbl_report и tbl_r_f. Таблица tbl_r_f содержит поля id категории и id отчета. Т.е., в <select должны выводиться все f_name и среди них выделяться те, к которым относятся данные отчеты. Надеюсь, теперь немного понятнее. Но, если нет, попробую еще раз еще понятнее выразиться
 

Фанат

oncle terrible
Команда форума
судя по всему, ответ на мой вопрос - положительный.

-~{}~ 30.07.06 22:05:

тебе нужен запрос LEFT OUTER JOIN

-~{}~ 30.07.06 22:08:

Но, если нет, попробую еще раз еще понятнее выразиться
боюсь, у тебя не получится.
Думаю, я могу связно сформулировать твой вопрос. Но мне это кажется несколько странным, если это буду делать я...
 

Yura

Новичок
Что-то не получается. Это в любой версии MYSQL работает? У меня 3.23.33.
Или может я что-то не так делаю?
 

Фанат

oncle terrible
Команда форума
в любой.
тебе надо получить список всех фолдеров, при этом выделить те, для которых есть записи в tbl_r_f для определённого значения ид_report. так?
 

Фанат

oncle terrible
Команда форума
ну и запрашивай ид_фолдер из tbl_r_f наряду с данными фолдеров
а сравнивать будешь в пхп
 

Yura

Новичок
Вот как я писал без LEFT OUTER JOIN:
$gres = mysql_query("SELECT * FROM tbl_folders, tbl_r_f WHERE f_type='1'");
for ($i=0; $i<mysql_num_rows($gres); $i++) {
$grow=mysql_fetch_array($gres);
if ($grow['f_id'] == $grow['id_folder']){
$sel = "selected";
} else {
$sel = "";
}
echo "<option value=\"{$grow['f_id']}\" $sel>{$grow['f_name']}";

}

Естественно, в самом запросе $qres чего-то не хватает. Выводит весь список f_name дважы, и при принадлежности отчета к двум категориям, выделяет одну категорию во втором списке, вторую - в первом.
 

Фанат

oncle terrible
Команда форума
Выводит весь список f_name дважы
радуйся, что у тебя в tbl_r_f всего две записи с f_type=1, а не 200.

ну наверное надо таблицы tbl_folders и tbl_r_f как-то связывать?
а не просто перечислять
 

Yura

Новичок
Вот я и думаю как. LEFT OUTER JOIN почему-то не работает. Как его хоть правильно использовать?

-~{}~ 30.07.06 22:52:

Заработало $gres = mysql_query("SELECT * FROM tbl_folders LEFT JOIN tbl_r_f ON tbl_folders.f_id=tbl_r_f.id_folder");
Только LEFT JOIN и LEFT OUTER JOIN выдает один и тот же результат. Чем они отличаются?

-~{}~ 30.07.06 23:16:

Теперь другая проблемка вылезла. Как редактировать? Если отчет принадлежит двум категориям, а я хочу, чтобы он принадлежал еще и третьей категории
 
Сверху