2013-09-30 6 views
0

이 스크립트를 가지고 있습니다. 먼저 쿼리 1을 실행하고 배열에 저장 한 다음 2, foreach를 사용하여 쿼리를 결합하고 URL 목록을 만듭니다.하지만이 작업에는 시간이 걸립니다. . 거기에 테이블을 결합하여 MySQL에서 그냥 할 수있는 방법이있다 그들은 일반적인 열이 있습니까?mysql 두 테이블을 공통적으로 사용하지 않고

쿼리 1

SELECT 
    c.id, 
    c.city_name, 
    r.region_name, 
    cr.country_name 
    FROM city AS c, region AS r, country AS cr 
    WHERE r.id = c.id_region 
     AND cr.id = c.id_country 
     AND cr.id IN 
      (SELECT id FROM country WHERE used = 1) 

쿼리 2

SELECT id, title FROM param WHERE active = 1 

루프

foreach ($arrayCity as $city) { 
    foreach ($arrayParam as $param) { 
     $paramTitle = str_replace(' ', '+', $param['title']); 
     $url = 'http://url/city/'. $city['id'] .'/paramId/'. $param['id'] .'/'. 
       $paramTitle .'/'. $city['region_name'] .'/'. $city['city_name']; 
      } 
     } 

답변

0

에 가입 잊었 방법에 대한

Select 'http://url/city/' + c.id + '/paramId/' + p.id + '/' + 
      Replace(title, ' ', '+') + '/' + r.region_Name + '/' + c.city_Name 
    From city c 
     Join region r On r.id = c.id_region 
     Join country n On n.id = c.id_country 
     cross join param p 
    Where n.Uused = 1 
     And p.active = 1  
1

당신은 조건에 가입 할 필요가 없습니다. 그렇게하지 않으면 CROSS JOIN이라고합니다. CROSS 키워드는 선택 사항입니다. 사실 ,은 동의어이기 때문에 이미이 작업을 수행하고 있습니다.

FROM city AS c, region AS r, country AS cr, param 
+0

nitpick하지만' '는 크로스 조인의 동의어가 아니다. 그것은 오히려 모든 조인에 대한 pre-SQL 1992 구문의 부분 (테이블 목록 구분 기호 부분)입니다. –

0

이와 비슷한 것입니다. 기본 테이블의 결과로 연결된 문자열을 선택할 수 있습니다.

SELECT 
    c.id, 
    c.city_name, 
    r.region_name, 
    cr.country_name, 
    ('http://url/city/' + c.city_name + '/' + p.param + '/' + c.id) AS URL 
    FROM city AS c, region AS r, country AS cr 
    JOIN param p ON c.id = p.id 
    WHERE r.id = c.id_region AND cr.id = c.id_country AND cr.id IN (SELECT id FROM country WHERE used = 1) 

내 경험 TSQL에 있지만 내 SQL에 가까운 수 있습니다

편집 : 죄송합니다이

관련 문제