2014-12-10 3 views
0

Если у меня есть 15 строк в одной таблице, и я присоединяюсь к другой таблице, могу ли я все же выводить все 15, даже если я хочу присоединиться, где значение может быть пустым? В принципе, вы можете использовать JOIN + include nulls из результата объединения. Например:SQL JOIN, но включают в себя нули

1 
2 
3 
4 
5 
6 

После присоединиться только 3 имеют присоединиться параметр

2 
4 
5 

Как я могу отобразить все?

Я попробовал следующее:

"SELECT * 
     FROM `ultrait_wpl_properties` 
     JOIN ultrait_wpl_property_types 
     ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
     ORDER BY ultrait_wpl_properties.id" 

Эта часть выводит дубликата удостоверения личности?

$sql = "SELECT * 
     FROM `ultrait_wpl_properties` 
     LEFT JOIN ultrait_wpl_property_types 
     ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
     ORDER BY ultrait_wpl_properties.id ASC"; 
$result = mysqli_query($con, $sql); // Connect and run query 

$dom = new DOMDocument(); // New DOM 

$root = $dom->createElement('root'); // Create parent or root node 
$dom->appendChild($root); // Append the root tag to the DOM 

while($r = mysqli_fetch_assoc($result)){ 

    $node = $textContent = null; // $node will equal $textContent which is null 
    $property = $dom->createElement('property'); // Create containing node 

    foreach($r as $column_name => $val) { // Loop through key value pairs 
     // so loop all the values on each row 
+3

Вы хотите использовать так называемое «внешнее соединение». В зависимости от того, какая из таблиц имеет ваши нулевые данные, вы должны использовать либо «left join», либо «right join». –

+0

Вам нужно левое/правое соединение, а не внутреннее соединение. Какая таблица имеет нулевое значение в вашем запросе? – SMA

+0

Возможный дубликат [Как подключиться, включая строку с данными NULL] (http://stackoverflow.com/questions/20106424/how-to-join-including-row-with-null-data) – GolezTrol

ответ

0

Попробуйте эти:

"SELECT * 
    FROM `ultrait_wpl_properties` 
    LEFT JOIN ultrait_wpl_property_types 
    ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
    ORDER BY ultrait_wpl_properties.id" 

ИЛИ:

"SELECT * 
    FROM `ultrait_wpl_properties` 
    RIGHT JOIN ultrait_wpl_property_types 
    ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
    ORDER BY ultrait_wpl_properties.id" 

shree.pat18 правильно это или зависит от вашей ситуации использовать INNER, вправо или влево JOIN

+0

Есть ли причина, по которой выводятся идентификаторы? Идентификатор - это первый столбец в левой таблице –

+0

Он не будет повторяться. Но это даст вам нулевое значение, если записи в вашей первой записи не совпадают со второй записью. Пожалуйста, обратитесь к этому http://i.imgur.com/hhRDO4d.png – Yodism

+0

У меня есть PHP-скрипт, который проходит через базу данных, но по какой-то причине он выводит те же идентификаторы дважды, но с другим контентом? –

0

Почему вы не попробуете left join

SELECT * 
     FROM `ultrait_wpl_properties` 
     LEFT JOIN ultrait_wpl_property_types 
     ON ultrait_wpl_properties.property_type = ultrait_wpl_property_types.id 
     ORDER BY ultrait_wpl_properties.id 
Смежные вопросы