MySQL: разница между связывающими и несоответствующими таблицами

У меня есть 2 таблицы: "catalog" и "press", являющиеся "press" дочерней таблицей, и они связаны между собой id_catalog (указывающим на "id" в каталоге) внутри "press".

Мне удалось получить одно поле в каталоге ("имя") и их "печатных" детей, как это для тестирования porpouse:

$query="SELECT catalog.book_title, press.* FROM catalog, press WHERE press.id_catalog = $id";

$book_title = mysql_result($result,$i,"_catalog.book_title");
$media_name = mysql_result($result,$i,"_press.media");
$type = mysql_result($result,$i,"_press.type");
$url = mysql_result($result,$i,"_press.url");

echo $book_title $media_name $type $url;

$book_title = mysql_result($result,$i+1,"catalog.book_title");
$media_name = mysql_result($result,$i+1,"press.media");
$type = mysql_result($result,$i*+1*,"press.type");
$url = mysql_result($result,$i*+1*,"press.url");

echo $book_title $media_name $type $url;

В запросе $id передается GET_[] Возвращает ожидаемое

Вот вопрос: что делать, если я не делаю отношения в базе данных? (с INDEX на id_catalog) Будет ли работать запрос?

Я отвечаю на это, потому что я думаю, что если я не сделаю отношение, то смогу сопоставить поля и заставить его работать в любом случае... или нет?

1 ответ

Решение

Я не думаю, что ваша проблема с индексом (хотя это поможет повысить производительность). Я думаю, проблема в том, что этот запрос производит декартово произведение - вы не связываете 2 таблицы:

SELECT catalog.book_title, press.* 
FROM catalog, press WHERE press.id_catalog = $id

Вместо этого должно быть что-то вроде:

SELECT catalog.book_title, press.* 
FROM catalog 
   JOIN press ON catalog.id = press.id_catalog
WHERE press.id_catalog = $id
Другие вопросы по тегам