2011-01-17 4 views
0

나는이 두 테이블, 두 테이블에서 데이터를 가져 오려면 가장 좋은 방법은 무엇입니까?

agent(id, name, password, ..., shop_id); 
shop(id, name, address, ...); 

지금은 에이전트의 가게 이름을 인출하려면 어떻게해야합니까

? 나는 두 시퀀스 SQL 쿼리,

<?php 
$qstr = <<<SQL 
SELECT * FROM agent WHERE id=$id; 
SQL; 
$result = $conn->query($qstr); 
$row = $result->fetch_assoc(); 
foreach ($row as $key => $value) 
    $$key = $value; 

$qstr = <<<SQL 
SELECT name FROM shop WHERE id=$shop_id; 
SQL; 
$result = $conn->query($qstr); 
$row = $result->fetch_assoc(); 
$shop_name = $row['name']; 
?> 

아니면이 선택에 대한 뷰를 생성한다

CREATE VIEW f_agent AS SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name FROM agent, shop WHERE agent.shop_id=shop.id; 

아니면 그냥 SQL을 사용한다

SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name FROM agent, shop WHERE agent.shop_id=shop.id and agent.id=$id; 

은 무엇의를 사용해야 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

3

프런트 엔드의 페이지에서 사용할 특정 검색어 일 경우 간단한 SQL이 가장 잘 작동해야합니다. MySQL에서 원하는 EVERY SINGLE 가능한 결과 집합에 대한 뷰를 만드는 포인트가 없습니다. 나는 그러나 제안을 할 수있는 경우

, 밑에 SQL92 ANSI 구문

SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name 
FROM agent 
INNER JOIN shop ON agent.shop_id=shop.id 
WHERE agent.id=$id; 

을 고려하시기 바랍니다 더 상황 안하면 결과에 대한 같은 조회 열에 대한 루프를 사용하여 PHP에서 MySQL로 멀티 여행 세트. 내가

+0

그래서 가입 쿼리가 시퀀스 쿼리보다 빠릅니까? – Jichao

+0

DBMS가 테이블이 어떻게 관련되어 있는지 정확하게 파악하여 더 잘 최적화 할 수 있으므로 예측 가능한 쿼리를 얻을 수 있습니다. 때때로, 더 빠르지는 않지만 가독성을 높이기위한 좋은 방법이기도합니다. – RichardTheKiwi

1

나는 그런 간단한 쿼리와 두 개의 별도의 결과를 사용하기위한보기를 사용하지 않을 무의미한 것 같다,하지만 난이 스레드를 찾을 수 매우 유익한. 이 작품도 좋을까요?

$query = "SELECT shop.id, shop.name, agent.name FROM shop LEFT JOIN agent ON shop.id = agent.id"; 

$res = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($res)){ 
    echo $row['shop']['name']. " - ". $row['agent']['name']; 
    echo "<br />"; 
} 
0

내가 같은 쿼리를 실행하는 새로운 오전 마지막 쿼리를 사용하는 것이 좋습니다 것 때문에

관련 문제