0

2つのテーブルがあります。「catalog」と「press」は子テーブルを「press」しており、「press」内のid_catalog(カタログの「id」を指す)によって関連付けられています。

私はなんとかカタログ(「名前」)の1つのフィールドと、porpousesをテストするためにこのような「プレス」の子を取得することができました。

$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_[]によって渡されます。期待されるものを返します。

質問は次のとおりです。データベースでリレーションを実行しない場合はどうなりますか?(id_catalogのINDEXを使用)クエリは機能しますか?

私はこれに答えています。なぜなら、私が関係を行わなければ、フィールドを一致させて、とにかくそれを機能させることができると思うからです...またはそうではありませんか?

4

1 に答える 1

0

あなたの問題はインデックスにあるとは思いません(パフォーマンスの向上には役立ちますが)。問題は、このクエリがデカルト積を生成していることだと思います。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
于 2013-02-15T23:11:54.840 に答える