Проблемы с соединением SQL

#mysql #sql #join

#mysql #sql #Присоединиться

Вопрос:

Интересно, может ли кто-нибудь мне помочь, пожалуйста.

У меня возникла проблема при попытке объединить информацию из двух таблиц базы данных MySQL.

Запрос, который я собрал до сих пор, показан ниже.

 <?php 
require("phpfile.php"); 

// Start XML file, create parent node 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server 

$connection=mysql_connect ("hostname", $username, $password); 
if (!$connection) { die('Not connected : ' . mysql_error());} 

// Set the active MySQL database 

$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
die ('Can't use db : ' . mysql_error()); 
} 

$query = "SELECT findid,
                 findosgb36lat,
                 findosgb36lon,
                 findcategory,
                 findname,
                 finddescription
          FROM   finds
          WHERE  makepublic = 'Yes'
            AND  sites.sitetype,
                 sites.sitedescription,
                 sites.siteosgb36lat,
                 sites.osgb36lon";  
$result = mysql_query($query); 
if (!$result) { 
die('Invalid query: ' . mysql_error()); 
} 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each 

while ($row = @mysql_fetch_assoc($result)){ 
// ADD TO XML DOCUMENT NODE 
$node = $dom->createElement("marker"); 
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("findosgb36lat",$row['findosgb36lat']); 
$newnode->setAttribute("findosgb36lon",$row['findosgb36lon']); 
$newnode->setAttribute("findcategory",$row['findcategory']); 
$newnode->setAttribute("findname",$row['findname']);
$newnode->setAttribute("finddescription",$row['finddescription']);
} 

echo $dom->saveXML(); 

?>
  

Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как извлечь все записи из таблицы ‘sites’, но только те записи из таблицы ‘finds’, где значение ‘makepublic’ равно ‘yes’. Я провел некоторое исследование, чтобы выяснить, будет ли работать конкретное соединение, то есть левое или правое, но поскольку между таблицами нет общего поля, я знаю, что они не будут работать.

Не мог бы кто-нибудь, возможно, показать мне, как я могу обойти эту проблему, пожалуйста.

Большое спасибо

Комментарии:

1. Если между таблицами нет общего поля, каким образом вы ожидаете, что они будут ассоциироваться друг с другом? Возможно, вы ищете UNION?

2. Звучит больше как объединение , чем объединение, но без общего столбца, как вы ожидаете выравнивания данных? (Если я не правильно понимаю брак таблиц)

3. Какова схема для каждой таблицы? Если они совпадают или если вы выбираете эквивалентные поля, вы можете использовать объединение.

4. p.s. В зависимости от производительности может иметь смысл устанавливать DOM только тогда, когда вам это нужно, а не перед созданием базы данных. (Не используйте его для создания DOM, если / когда соединение SQL не может быть установлено)

Ответ №1:

Делаем некоторые большие предположения о структурах таблиц:

       SELECT s.site_id,
             s.sitetype,
             s.sitedescription,
             s.siteosgb36lat,
             s.osgb36lon,
             f.findid,
             f.findosgb36lat,
             f.findosgb36lon,
             f.findcategory,
             f.findname,
             f.finddescription
      FROM   sites s
      LEFT OUTER JOIN finds f on s.site_id = f.site_id and f.makepublic = 'Yes'
  

Комментарии:

1. Всем привет, большое спасибо за ответ на мой пост. Возможно, ‘Union’ — это правильный путь, я не слишком уверен. Причина этого заключается в том, что у меня есть поля lat и lng в таблице «сайты» и другой набор в таблице «находки», которые я хочу попытаться объединить в одну строку узла, которую я затем загружу на HTML-страницу. С уважением

2. @IHRM: Серьезно, как сказал Джим Х., нам действительно нужно видеть структуры таблиц, которые вы используете, если мы хотим предложить разумный подход к их запросу.

3. Привет, теперь я добавил структуры таблиц в свой исходный пост. С уважением

4. @IHRM: где? Я их не вижу, и вы не показываете, что внесли изменения в свой исходный пост.

Ответ №2:

всем большое спасибо за вашу помощь в этом. Я работал над этим сегодня и решил все проблемы, которые у меня были, используя запрос ‘UNION ALL’. С уважением