Игнорировать нулевые результаты в запросах MySQL JOIN - PullRequest
3 голосов
/ 15 июля 2011

У меня есть запрос на соединение MySQL, который хорошо работает (заявление об отказе: взято из учебника) :

<?php
    $connection = mysql_connect("localhost", "root", "test") or die("Error connecting to database");
    mysql_select_db("products90", $connection);
    $result = mysql_query("SELECT * FROM buyers LEFT JOIN products USING (id);", $connection) or die("error querying database");
    $i = 0;
    while($result_ar = mysql_fetch_assoc($result)){
    ?>
    <table>
    <tr <?php if($i%2 == 1){ echo "class='body2'"; }else{echo "class='body1'";}?>>
    <td>
    <?php echo $result_ar['buyer_name']; ?></td>
    <td>
    <?php echo $result_ar['manufacturer']; ?>
    </td>
    <td>
    <?php echo $result_ar['product_name']; ?>
    </td>
    </tr>
    </table>
    <?php
    $i+=1;
    }
    ?>

Однако если Я хотел, чтобы он игнорировал результаты NULL, что мне нужно делать с JOIN, какой тип подходит?

Я заглянул в Google, но не уверен, что делать дальше.

Ответы [ 5 ]

2 голосов
/ 15 июля 2011

Когда вы говорите, что у вас нулевые результаты, вы имеете в виду, где нет товаров?

В любом случае, если у вас нулевые идентификаторы, следовательно, нет результата в товарах, вы можете просто добавить

where products.id is not null

или вы можете изменить соединение с левого соединения на просто соединение, сделав его внутренним соединением

1 голос
/ 15 июля 2011

Для этого вы бы использовали ВНУТРЕННЕЕ СОЕДИНЕНИЕ (если я правильно понял ваш вопрос).

Для обзора типов JOIN в MySQL, пожалуйста, обратитесь к http://dev.mysql.com/doc/refman/5.1/en/join.html

1 голос
/ 15 июля 2011

Говоря, что вы хотите игнорировать результаты NULL, что именно вы имеете в виду? Вы говорите, что когда ваше левое объединение выполняется, вы получаете покупателей, у которых NULL рядом с ними , где продукты были бы (если бы они купили)?

В этом случае вам нужно ВНУТРЕННЕЕ СОЕДИНЕНИЕ, которое будет показывать значения только в том случае, если в другом .

1 голос
/ 15 июля 2011
SELECT * FROM buyers LEFT JOIN products USING (id) WHERE products.id IS NOT NULL

ИЛИ

SELECT * FROM buyers JOIN products USING (id)

Использование JOIN приносит только совпадающие строки, тогда как LEFT JOIN приводит всех покупателей независимо от совпадений, найденных в продуктах, и фильтрует записи впоследствии. Я не совсем уверен в вашем сценарии, но мне кажется проще использовать JOIN вместо LEFT JOIN

0 голосов
/ 15 июля 2011

Если вы хотите игнорировать нулевые результаты, просто используйте INNER JOIN, вам не нужно LEFT JOIN.
Измените ваш запрос на:

SELECT * FROM buyers JOIN products USING (id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...