У меня есть запрос на соединение 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, но не знаю, с чего начать.
Когда вы говорите, что у вас есть нулевые результаты, вы имеете в виду, где нет продуктов?
В любом случае, если у вас есть идентификаторы нулей, следовательно, никакого результата в продуктах, вы можете просто добавить
where products.id is not null
или, вы можете изменить соединение с левого соединения, чтобы просто присоединиться, сделав его внутренним соединением
Говоря, что вы хотите игнорировать результаты NULL, что именно вы имеете в виду? Вы говорите, что когда ваше левое соединение выполняется, вы получаете некоторых покупателей, которые NULL рядом с ними, где будут продукты (покупали они их)?
В этом случае то, что вы ищете, это INNER JOIN, который будет показывать только значения, если он имеет совпадение в другом .
Вы бы использовали INNER JOIN для этого (если бы я правильно понял ваш вопрос).
Обзор типов JOIN в MySQL см. На странице http://dev.mysql.com/doc/refman/5.1/en/join.html.
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
Если вы хотите проигнорировать нулевые результаты, просто используйте INNER JOIN
, вам не нужен LEFT JOIN
.
Измените свой запрос на:
SELECT * FROM buyers JOIN products USING (id)