#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’. С уважением