Проблема с сортировкой данных из базы данных с использованием DESC из-за Ajax Filter - PullRequest
0 голосов
/ 12 января 2019

У меня проблема с сортировкой данных с использованием DESC, потому что я использую Ajax Filter.

Данные отображаются правильно, но я хочу отсортировать их, чтобы показать последние добавленные в верхней части страницы. Вот почему я пытался добавить DESC, но проблема в том, что я использую фильтр Ajax, и когда я добавляю DESC, то ничего не появляется.

SELECT products.*, products_images.filename
FROM products
INNER JOIN products_images ON
(products_images.product_id = products.id)
WHERE products_images.product_id = products.id
AND products_images.id = (SELECT MIN(id)
FROM products_images
WHERE product_id = products.id AND product_status = '1' GROUP BY products.id)

Все работает, пока я не добавлю DESC в конец этого кода.

Ответы [ 3 ]

0 голосов
/ 12 января 2019

Я добавил просто rsort () для сортировки всех продуктов. Но метод Dharman был великолепен и работал хорошо, но с его методом у меня возникла проблема с ajax filer, чтобы фильтровать продукты. Люблю машины, фильтрую и показываю только марки BMW или AUDI .. Но эта функция rsort () работает хорошо и не конфликтует с фильтром.

$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$total_row = $statement->rowCount();
----ADDED RSORT-----> rsort($result); <-----
$output = '';
if($total_row > 0)
{

    foreach($result as $row)
0 голосов
/ 12 января 2019

Это первая часть кода. Давайте назовем этот файл getdata.php

$query = "
SELECT products.*, products_images.filename..........";

 if(isset($_POST["carbody"]))
    {
         $carbody_filter = implode("','", $_POST["carbody"]);
         $query .= "
         AND carbody IN('".$carbody_filter."')
         ";
    }

, а затем код на странице index.php

<?php
$query = "SELECT DISTINCT(carbody) FROM products WHERE 
product_status = '1' ORDER BY id DESC";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach($result as $row)
{
?>
<label><input type="checkbox" class="common_selector carbody" value="<?php echo         
$row['carbody']; ?>"  > <?php echo $row['carbody']; ?></label><br />
<?php}?>

и тогда у меня есть js в конце страницы index.php ...

$(document).ready(function(){

    filter_data();

    function filter_data()
    {
        $('.filter_data').html('<div id="loading" style="" ></div>');
        var action = 'fetch_data';
        var degviela = get_filter('degviela');
        var ser = get_filter('ser');
        $.ajax({
            url:"fetch_data.php",
            method:"POST",
            data:{action:action, carbody:carbody, ser:ser},
            success:function(data){
                $('.filter_data').html(data);
            }
        });
    }

    function get_filter(class_name)
    {
        var filter = [];
        $('.'+class_name+':checked').each(function(){
            filter.push($(this).val());
        });
        return filter;
    }

    $('.common_selector').click(function(){
        filter_data();
    });

когда я публикую ваш заданный код "ORDER BY products.id DESC" в конце $ query = "SELECT ....", тогда на странице index.php отображаются не продукты, а rsort ($ result); перед foreach все работает нормально, продукты сортируются и флажок фильтрует продукты.

0 голосов
/ 12 января 2019

Чтобы отсортировать результаты по убыванию идентификатора продукта, попробуйте добавить ORDER BY products.id DESC в конце:

SELECT products.*, products_images.filename
    FROM products
    INNER JOIN products_images ON
        (products_images.product_id = products.id)
    WHERE products_images.product_id = products.id
        AND products_images.id = (SELECT MIN(id)
            FROM products_images
            WHERE product_id = products.id AND product_status = '1' GROUP BY products.id)
    ORDER BY products.id DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...