2012-01-15 3 views
-1

이 데이터 구조이다 사용자가 소유MySQL을 하나 개의 쿼리에서 네 개의 테이블에서 얻는 정보는

  1. 점포 자사을 나는 이드에게 제공 할 것이다. [상점에서, owner_id = some_number 일 때]
  2. 각 상점에 대해 첨부 된 도시도 있습니다. [도시에서]
  3. 상점에 대한 특권을 관리하는 사용자. [from store_managers]
  4. 각 상점에 할당 된 제품 수입니다.

하나의 검색어가 필요합니다. DB를 고정 MYSQL


이며, 누락 된 외래 키 내 실수, 각 점포는 하나 개의 도시에 부착하고 외래 키를 분실했다고 가정 감사

+7

무엇을 시도 했습니까? _ 정확히 당신은 어려움을 겪고 있습니까? 지금까지의 노력을 보여주는 것이 아니라 귀하의 문의를 보내드립니다. – Oded

+0

+1 Oded. 이 숙제가 있니? 우리가 당신에게지도를 줄 수 있다면 ... –

+1

도시와 상점 사이에 연결이없는 것 같아요. – Quasdunk

답변

1

을 추가, 그것은 뭔가를 보일 수 있습니다 이 (MySQL의 특정 내가 전에 배운) :

SELECT s.id, GROUP_CONCAT(u.name SEPARATOR ', ') as users, 
COUNT(p.*) AS product_count 
FROM stores s 
JOIN city c ON s.city_id = c.id 
JOIN store_managers sm ON sm.store_id = s.id 
JOIN users u ON u.id = sm.user_id 
JOIN products p ON p.store_id = s.id 
WHERE s.owner_id = ? 
GROUP BY s.id 

그러나, 당신은 이미 당신은 단지 이름을 검색 할 수 있습니다대로 함께 모든 것을 가져 오는없는 좋은 것을 볼 한 문자열 내에서 또는 store_id을 포함하는 여러 행을 얻을 수 있습니다. 연결된 목록에 실제로 이름이 필요하지 않으면 이름을 쉼표로 묶는 즉시 문제가 발생할 수 있으므로 다시 연결해야합니다. 그룹화하지 않으면 나중에 PHP로 모든 행을 반복하고 조작해야합니다. 때로는 두 개의 쿼리를 만드는 것이 더 좋지만 사용자의 이름이 필요한 방식에 따라 달라질 수 있습니다.

많은 질문을 하나의 쿼리에 넣으면 나중에 문제가 발생합니다. 이 경우 모든 것이 여전히 관리 가능하지만 한 번에 여러 번 계산 되 자마자 위험 할 수 있습니다.

테스트하지 않고도 직접 실수를 할 수 있습니다.

+0

감사합니다. 하나 대신 두 개의 쿼리 개념에 동의하지만 첫 번째 쿼리에서 100 개의 저장소가 있고 store_managers에 대해 각 쿼리를 쿼리해야 할 때보 다이 작업을 수행하는 방법을 알 수 없습니다. 내가 틀렸어? – yossi

+1

@ yossi : 예, 지금 올바르게 생각하면 소유자 이름에 대해 100 개의 검색어를 사용하게됩니다. 'WHERE store_id IN (1,2,3,4,5)'를 사용하여 하나의 쿼리를 수행 할 수도 있지만 각 store_id에 대한 결과를 다시 분할해야합니다 (동일한 store_id를 가진 여러 행). 그렇게 될 것입니다. – Aufziehvogel

+0

VM에 감사드립니다! . – yossi

관련 문제