2013-09-30 10 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

придираться, но ', 'далеко не является синонимом перекрестного соединения. Его, скорее, просто часть (часть разделителя списка таблиц), синтаксис 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

Edit: К сожалению, забыл джойн

Смежные вопросы