За последние 24 часа нас посетили 20620 программистов и 1011 роботов. Сейчас ищут 367 программистов ...

Как объединить 2 базы в один запрос?

Тема в разделе "PHP и базы данных", создана пользователем lesmanora, 25 янв 2021.

Метки:
  1. lesmanora

    lesmanora Новичок

    С нами с:
    25 янв 2021
    Сообщения:
    5
    Симпатии:
    0
    Есть две таблицы, book и tovar, надо вывести все магазины из book, которые ровны tovar.products_id = book.id.
    Одна содержит в себе книги, другая ссылку на магазин с этой книги.
    На странице с общим списком книг так же должны под каждый книгой отображаться свой магазин. Вопрос. Как это сделать? В данном запросе ниже выводятся все книги и все магазины....

    PHP:
    1. <?php
    2. $link = mysqli_connect($db_host, $db_user, $db_password, $db_database)
    3.     or die("Ошибка " . mysqli_error($link));
    4.    
    5.    
    6. $query ="SELECT * FROM book  ORDER BY id  ";
    7. $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    8. if (mysqli_num_rows($result) > 0)
    9. {
    10. $row = mysqli_fetch_array($result);
    11. do
    12. {
    13.    
    14.     $img_pathh = 'uploads_images/'.$row["image"];
    15.    
    16.                          echo '
    17.      
    18.      
    19.            <div class="row justify-content-center">
    20.              
    21.                <div class="col-md-4 books-content-img">
    22.                    <a href="book.html"><img src="'.$img_pathh.'"/></a>
    23.                </div>
    24.              
    25.                <div class="col-md-5 books-annotation">
    26.              
    27.              
    28.                <div class="books-annotation-content">
    29.                <div class="books-annotation-title">
    30.                    <h2><a href="book.php">'.$row["title"].'</a></h2>
    31.                  
    32.                    <p>Жанр: <span>'.$row["genre"].'</span></p>
    33.                    <p>Возрастное ограничение: <span>'.$row["age"].'</span></p>
    34.                    </div>
    35.                  
    36.                <div class="books-annotation-text">
    37.                    <p>'.$row["miniannotation"].'</p>
    38.                    </div>
    39.                </div>
    40.                  
    41.                    <div class="books-annotation-read">
    42.                      
    43.                        <h3>Купить и читать:</h3>
    44.                        <ul class="hr">
    45.                      
    46.                        ';
    47.            
    48.                        
    49.                        
    50.                         $query1 ="select * from tovar join book on tovar.products_id = book.id";
    51. $result1 = mysqli_query($link, $query1) or die("Ошибка " . mysqli_error($link));
    52. while($row1 = mysqli_fetch_assoc($result1)){
    53.     echo '<li><a href="'.$row1["tovar"].'" target="_blank">'.$row1["many"].'</a></li>';
    54. }
    55.                            
    56.         echo '                    
    57.                          
    58.                        </ul>
    59.                      
    60.                    </div>
    61.                  
    62.                </div>
    63.                  
    64.            </div>
    65.          
    66.        ';
    67.        
    68. }
    69.     while ($row = mysqli_fetch_array($result));
    70. }                          
    71. ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    1. Это не две базы, а две таблицы в одной базе
    2. смотрите в сторону LEFT JOIN, JOIN
    3. Никогда, слышите - никогда не делайте запросы к БД в цикле
     
  3. lesmanora

    lesmanora Новичок

    С нами с:
    25 янв 2021
    Сообщения:
    5
    Симпатии:
    0
    При LEFT JOIN, JOIN выводит так же все магазины, а не по id. Ничего не понимаю, почему не работает?
    Посмотрите на код, у меня получается, что магазины находятся в пределах одного кода. Там где циклом надо вывести все книги.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    на SQL fiddle разместите структуру и данные по вашим двум таблицам - а мы поможем вам с запросом
     
  5. lesmanora

    lesmanora Новичок

    С нами с:
    25 янв 2021
    Сообщения:
    5
    Симпатии:
    0
    book

    upload_2021-1-25_20-11-36.png


    tovar

    upload_2021-1-25_20-12-31.png



    tovar.products_id = book.id.

    Извините, ныкалась, ныкалась, но я не знаю, как работать с сервисом SQL fiddle....
    Возможно, я в данный момент не до конца знаю PHP и знаю, пока как делать несложные запросы, но я правда учусь.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Код (Text):
    1. SELECT book.name, tovar.tovar FROM book
    2.    LEFT JOIN book.id = tovar.product.id
    3. GROUP BY book.id
    выдаст список всех книг с названием "магазина" к которому они привязаны....

    конечно на случай если 1 книга только в одном магазине, иначе - будет представлен один из магазинов в котором есть книга, и там по другому надо делать если в нескольких магазинах книга...

    и это ... давайте адекватные имена таблицам и полям.....
    если это магазины - назовите shop, если связь к книге - book_id, если название магазина - то name а не tovar

    иначе запутаетесь в конец
     
  7. lesmanora

    lesmanora Новичок

    С нами с:
    25 янв 2021
    Сообщения:
    5
    Симпатии:
    0
    да сложность как раз и есть в том, что одна книга в нескольких магазинах... эх

    upload_2021-1-25_21-1-21.png

    То есть купить и читать: должны вывестись все магазины в которых есть эта книга

    Так вообще можно прикрепить?
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Можно. В какой колонке у вас магазины?
    Используйте GROUP_CONCAT
    http://www.mysql.ru/docs/mysql-man-5.0-en/functions.html#function_group-concat
     
  9. lesmanora

    lesmanora Новичок

    С нами с:
    25 янв 2021
    Сообщения:
    5
    Симпатии:
    0
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Воспользуйтесь этой функцией дважды. Для каждой из нужных колонок.
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    а лучше - нормально спланируйте и назовите таблицы и поля... чтоб не иметь головняка каждый раз