Есть две таблицы, book и tovar, надо вывести все магазины из book, которые ровны tovar.products_id = book.id. Одна содержит в себе книги, другая ссылку на магазин с этой книги. На странице с общим списком книг так же должны под каждый книгой отображаться свой магазин. Вопрос. Как это сделать? В данном запросе ниже выводятся все книги и все магазины.... PHP: <?php $link = mysqli_connect($db_host, $db_user, $db_password, $db_database) or die("Ошибка " . mysqli_error($link)); $query ="SELECT * FROM book ORDER BY id "; $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); if (mysqli_num_rows($result) > 0) { $row = mysqli_fetch_array($result); do { $img_pathh = 'uploads_images/'.$row["image"]; echo ' <div class="row justify-content-center"> <div class="col-md-4 books-content-img"> <a href="book.html"><img src="'.$img_pathh.'"/></a> </div> <div class="col-md-5 books-annotation"> <div class="books-annotation-content"> <div class="books-annotation-title"> <h2><a href="book.php">'.$row["title"].'</a></h2> <p>Жанр: <span>'.$row["genre"].'</span></p> <p>Возрастное ограничение: <span>'.$row["age"].'</span></p> </div> <div class="books-annotation-text"> <p>'.$row["miniannotation"].'</p> </div> </div> <div class="books-annotation-read"> <h3>Купить и читать:</h3> <ul class="hr"> '; $query1 ="select * from tovar join book on tovar.products_id = book.id"; $result1 = mysqli_query($link, $query1) or die("Ошибка " . mysqli_error($link)); while($row1 = mysqli_fetch_assoc($result1)){ echo '<li><a href="'.$row1["tovar"].'" target="_blank">'.$row1["many"].'</a></li>'; } echo ' </ul> </div> </div> </div> '; } while ($row = mysqli_fetch_array($result)); } ?>
1. Это не две базы, а две таблицы в одной базе 2. смотрите в сторону LEFT JOIN, JOIN 3. Никогда, слышите - никогда не делайте запросы к БД в цикле
При LEFT JOIN, JOIN выводит так же все магазины, а не по id. Ничего не понимаю, почему не работает? Посмотрите на код, у меня получается, что магазины находятся в пределах одного кода. Там где циклом надо вывести все книги.
book tovar tovar.products_id = book.id. Извините, ныкалась, ныкалась, но я не знаю, как работать с сервисом SQL fiddle.... Возможно, я в данный момент не до конца знаю PHP и знаю, пока как делать несложные запросы, но я правда учусь.
Код (Text): SELECT book.name, tovar.tovar FROM book LEFT JOIN book.id = tovar.product.id GROUP BY book.id выдаст список всех книг с названием "магазина" к которому они привязаны.... конечно на случай если 1 книга только в одном магазине, иначе - будет представлен один из магазинов в котором есть книга, и там по другому надо делать если в нескольких магазинах книга... и это ... давайте адекватные имена таблицам и полям..... если это магазины - назовите shop, если связь к книге - book_id, если название магазина - то name а не tovar иначе запутаетесь в конец
да сложность как раз и есть в том, что одна книга в нескольких магазинах... эх То есть купить и читать: должны вывестись все магазины в которых есть эта книга Так вообще можно прикрепить?
Можно. В какой колонке у вас магазины? Используйте GROUP_CONCAT http://www.mysql.ru/docs/mysql-man-5.0-en/functions.html#function_group-concat