|
|
|
| имеется три таблицы
передаю методом get переменную в скрипт
$_GET['id_dir'];
делаю запрос на таблицы
categories |id_categ|name|id_dir - внешний ключ
subcategories |id_subcateg|name|id_cat - внешний ключ к id_categ
$query = "SELECT categories.id_categ AS cid, categories.name AS name, subcategories.id_subcateg AS sid, subcategories.name AS sname FROM categories LEFT JOIN subcategories ON categories.id_dir=".$_GET['id_dir']." AND subcategories.id_cat= categories.id_categ ORDER BY categories.name";
|
делаю выборку
$rez = mysql_query($query);
$name = "";
while($menu = mysql_fetch_array($rez))
{
if($name != $menu['name'])
{
echo "<li>".$menu['name']."<br>";
$name = $menu['name'];
}
echo " ".$menu['sname']."<<br>";
}
|
хотел получить поля $menu['name'] которые соответствуют $_GET['id_dir'];
но в результате вываливается все содержимое таблицы categories.
Почему это происходит.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: куч1963
(21.03.2006 в 14:06)
| | Потому что LEFT. Раз LEFT , значит нужны все записи левой таблицы, а не только те, которым есть соответствие.
И еще. Если Вы применяете JOIN ....ON то в условии ON должно находиться только равенство, задающее соответствие. Все остальные условия должны быть убраны под WHERE. | |
|
|
|
|
|
|
|
для: Trianon
(21.03.2006 в 14:14)
| | Если я Вас правильно понял, то правильно запрос должен выглядеть где-то так
$query = "SELECT categories.id_categ AS cid, categories.name AS name, subcategories.id_subcateg AS sid, subcategories.name AS sname FROM categories INNER JOIN subcategories ON categories.id_dir=".$_GET['id_dir']." WHERE subcategories.id_cat= categories.id_categ ORDER BY categories.name";
|
| |
|
|
|
|
|
|
|
для: куч1963
(21.03.2006 в 15:34)
| | Наоборот.
В разделе ON - условие связывания таблиц
В разделе WHERE - условие фильтрации данных
SELECT нужные поля
FROM таблица1 JOIN таблица2 ON таблица1.ключ1 = таблица2.ключ2
WHERE таблицаN.полеN = независимый_параметр
$query = "SELECT categories.id_categ AS cid, categories.name AS name, subcategories.id_subcateg AS sid, subcategories.name AS sname FROM categories INNER JOIN subcategories ON subcategories.id_cat= categories.id_categ WHERE categories.id_dir=".$_GET['id_dir']." ORDER BY categories.name"; | |
|
|
|
|
|
|
|
для: Trianon
(21.03.2006 в 15:50)
| | Большое спасибо за совет.
Все прошло на ура. | |
|
|
|