Как объединить 2 (option) в фильтре чтобы выводилась нужные статьи из бд

211
19 декабря 2021, 01:20

Здравствуйте! Я мало что понимаю в mySQL, но так вышло, что я с ним связался...)) У меня есть фильтр, написанный с помощью JS, мне необходимо с его помощью доставать из бд нужные записи(выбираем первый option из id flat, за тем выбираем второй option из id metro и получаем нужные статьи.) У меня получилось вытаскивать статьи из бд и option`ы тоже. Теперь встал вопрос как объединить option из id flat и id metro , чтобы получить нужные записи? пытался через JOIN и AND, но видимо я ошибся. Вот сам фильтр:

<select id="flat">
                <?php $filterflat = get_filterflat(); ?>
                <?php foreach ($filterflat as $post): ?>
                <option value="<?=$post["rooms"]?>"><?=$post["rooms"]?></option>
                <?php endforeach; ?>
            </select>
            <select id="metro">
                <?php $filtermetro = get_filtermetro(); ?>
                <?php foreach ($filtermetro as $post): ?>
                <option value="<?=$post["station"]?>"><?=$post["station"]?></option>
                <?php endforeach; ?>
            </select>
            <?php $posts = get_posts(); ?>
            <?php foreach ($posts as $post): ?>
            <div id="items">
                <div class="item" data-color="<?=$post["rooms"]?>" data-shape="<?=$post["station"]?>">
                    <div class="infoFlat">
                        <h3> <?=$post["titleflat"]?> </h3>
                        <h3><?=$post["titlemetro"]?></h3>
                        <h3><?=$post["price"]?>.</h3>
                        <p class="b1"><?=$post["date"]?></p>
                    </div>
                    <div class="itemText">
                        <p><?=$post["text"]?></p>
                    </div>
                </div>
            </div>  
            <?php endforeach; ?>

Вот Function.php

function get_posts() {
        global $connection;
        $sql = " SELECT * FROM orders_posts ORDER BY rand()";
        $result = mysqli_query($connection, $sql);
        $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $posts;
    }
    function get_filterflat() {
        global $connection;
        $sql = "SELECT * FROM filterflat";
        $result = mysqli_query($connection, $sql);
        $filterflat = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $filterflat;
    }
    function get_filtermetro() {
        global $connection;
        $sql = "SELECT * FROM filtermetro";
        $result = mysqli_query($connection, $sql);
        $filtermetro = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $filtermetro;
    }
    function get_allFilters() {
        global $connection;
        // $sql = "SELECT filterflat.id, filtermetro.stationid, orders_posts.id FROM filterflatINNER JOIN filtermetro ON filterflat.id=filtermetro.stationid";
        $sql = "SELECT * FROM filterflat WHERE rooms AND filtermetro WHERE station AND orders_posts WHERE text";
        $result = mysqli_query($connection, $sql);
        $allfilters = mysqli_fetch_all($result, MYSQLI_ASSOC);
        return $allfilters;
    }

filterflat - таблица , в которой содержится столбцы id , rooms; filtermetro - таблица , в которой содержится столбцы stationid , station; orders_posts - таблица , в которой содержится столбцы id, titlemetro, titleflat, price, text, date; Первый критерий станции метро. К примеру (БУЛЬВАР РОКОССОВСКОГО или ПРЕОБРАЖЕНСКАЯ ПЛОЩАДЬ) Второй критерий кол.комнат в квартире. К примеру (1-к квартира или 2-к квартира.)

скрипт фильтра

var flat = document.getElementById('flat');
    var metro = document.getElementById('metro');
    var items_el = document.getElementById('items');
    var filter = function() {
        var items = items_el.getElementsByClassName('item');
        for (var i = 0; i < items.length; i++) {
            if ((flat.value == 'all' || flat.value == items[i].dataset.color) &&
                (metro.value == 'all' || metro.value == items[i].dataset.shape)) {
                items[i].style.display = 'block';
            } else {
                items[i].style.display = 'none';
            }
        }
    };
    flat.addEventListener("change", filter);
    metro.addEventListener("change", filter);
READ ALSO
Безопасно ли хранить пароль и логин в js?

Безопасно ли хранить пароль и логин в js?

Есть общий 'login-layout' компонент который роутит другие компоненты :

84
Плавная смена картинки через атрибут src js

Плавная смена картинки через атрибут src js

Подскажите пожалуйста, как можно сделать плавную смену картинки через JsЕсть массив с ссылками на картинки, я его перебираю и каждые несколько...

80
Загрузить файл в input[file] по ссылке на кариинку

Загрузить файл в input[file] по ссылке на кариинку

Как мне, зная ссылку на файл, (например, http://host/filepath/filenamepng) загрузить его в input[file] для отправки на сервер?

118
JS не видит элементы, созданные им ранее

JS не видит элементы, созданные им ранее

Делаю корзину онлайн магазинаВ правом верхнем углу у меня корзина, куда заносятся купленные товары

162