как сгруппировать несколько строк из одной таблицы и получить все записи в заданном диапазоне - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу, чтобы все общежития в указанном ценовом диапазоне из таблицы моего общежития. цена хранится в четырех разных строках: цена одна акция, цена две акции, цена три акции, цена больше акции,

public function actionNearbyHostel($min,$max,$types,$lat,$long){   
    $latitude = $lat;
    $longitude = $long;
    $type = $types;
    $max_price = (int)$max;
    $min_price = (int)$min;
    $hostels = Hostels::find ()->select("*,(6371 * 
        acos(cos(radians({$latitude}))* 
        cos(radians(`lat`)) * cos(radians(`log`) - radians({$longitude})) + 
        sin(radians({$latitude})) * sin(radians(`lat`)))) AS distance")
            ->having("distance<:distance")
            ->addParams([ 
                ':distance' => 5 
            ])->where([
                'status' => Hostels::ACTIVE,
                'type' => $type
            ])->andWhere(['between','price_one_share',$min_price,$max_price])
    ->all();
    return $this->render('filterhostel',[
        'hostels' => $hostels,
    ]);
} 

Это мое действие, где я уже написал

andWhere(['between','price_one_share',$min_price,$max_price])

вот так, я хочу включить оставшиеся три строки и получить мой результат.

это мое изображение строки таблицы http://www.clipular.com/posts/4991398571671552?k=Lud1W4LGJe5hSxOsl2ao7VOGguI

1 Ответ

0 голосов
/ 23 апреля 2019

После некоторой домашней работы я нашел ответ

 public function actionNearbyHostel($min,$max,$types,$lat,$long){   
    $latitude = $lat;
    $longitude = $long;
    $type = $types;
    $max_price = (int)$max;
    $min_price = (int)$min;
    $hostels = Hostels::find ()->select("*,(6371 * acos(cos(radians({$latitude}))* 
    cos(radians(`lat`)) * cos(radians(`log`) - radians({$longitude})) + 
    sin(radians({$latitude})) * sin(radians(`lat`)))) AS distance")
    ->having("distance<:distance")
    ->addParams([ 
    ':distance' => 5 
    ])->where([
    'status' => Hostels::ACTIVE,
    'type' => $type
    ])->andWhere(['or',
    ['between','price_one_share',$min_price,$max_price],
    ['between','price_two_share',$min_price,$max_price],
    ['between','price_three_share',$min_price,$max_price],
    ['between','price_more_share',$min_price,$max_price]
    ])
    ->all();
    return $this->render('filterhostel',[
        'hostels' => $hostels,
    ]);
}  
...