2013-02-15 4 views
0

"카탈로그"와 "언론"이 하위 테이블을 "누르는 중"이고 id_catalog (카탈로그의 "id"를 가리킴)와 관련이 있습니다. ". 쿼리에서MySQL : 관련된 테이블과 관련이없는 테이블의 차이점

$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_ []에 의해 전달됩니다

나는 ("이름") 및 테스트 porpouses이 같은 자신의 "를 눌러"차일 카탈로그에 하나 개의 필드를 얻을 수 있었다 예상 결과를 반환합니다.

다음은 질문입니다. 데이터베이스에서 관계를 설정하지 않으면 어떻게됩니까? (id_catalog의 INDEX 사용) 쿼리가 작동합니까?

나는 내가 필드와 일치하고 어쨌든 작동하게 만들 수있는 관계를하지 않으면 ...

+0

: 그것은 뭔가를해야한다, 대신

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

: 당신이이 개 테이블과 관련된되지 않습니다 - 나는 문제가이 쿼리는 데카르트의 제품을 생산하고 생각 당신이 기대하는 바는 우연입니다. 쿼리 자체에는 관계가 없으며 테이블 정의에 '외래 키'를 정의한다고해서 키가 자동으로 쿼리와 관련되지는 않습니다. –

+0

위의 쿼리는 카티 션 곱을 반환합니다. 정말로, 당신은'FROM press JOIN catalogue on press.id_catalog = catalog.id where press.id_catalog = $ id'을해야합니다. –

답변

0

문제가 색인과 관련이 있다고 생각하지 않습니다 (성능 향상에 도움이되지만). 위의 쿼리가 반환하는 경우

SELECT catalog.book_title, press.* 
FROM catalog 
    JOIN press ON catalog.id = press.id_catalog 
WHERE press.id_catalog = $id 
+0

알았어요. 그래서 나는 어떤 관계도하지 않고있다. 나는 그것을 작동 시키려고한다. 왜냐하면 나는 내가 할 수있는 "질의 트릭"으로 관계를 수행하는 것과 비슷하기 때문이다. 맞다. @sgeddes의 "내 방식"과 "올바른 방식"의 차이점은 성능에 있습니다. 편집 : 나는 계단식 "프레스"테이블에서 phpmyadmin에 관계를 만들었습니다. – noname

+0

@noname - 카탈로그 테이블에있는 레코드 수. 조회로 해당 테이블의 모든 레코드가 리턴됩니다. 두 테이블간에 JOIN (관계)을 추가하면 검색 기준과 일치하는 레코드 만 리턴됩니다. 희망이 도움이됩니다. – sgeddes

+0

그렇게하면 대형 데이터베이스의 성능이 향상됩니다! 이제 내 질문에 분명합니다 정말 감사합니다! 나는 당신에게 rep 지점을 주겠지 만 나는 내가 여기 새로 왔기 때문에 '할 수 없다. 건배! – noname