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