![](/img/trans.png)
[英]Yii2 : How to write Mysql query to select records from two tables using left join
[英]Return a value from a MySQL select with function using a Yii2 Query
我有一個Yii2 searchQuery設置,可以很好地用於計算不在給定點所需半徑內的那些記錄。
public function search($params)
{
$query = TrainerExtend::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => $this->pageSize,
],
]);
$this->load($params);
$query->having([
'<',
'ST_Distance_Sphere(POINT(' . $this->longitude . ',' . $this->latitude . '),
PointFromText(CONCAT(\'POINT(\',longitude,\'\',latitude,\')\')))',
$this->radius * 1000
]);
}
$rows = $query->distinct();
return $dataProvider;
}
public function actionFind()
{
$searchModel = new TrainerSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$trainers = $dataProvider->getModels();
if (array_key_exists('trainerSearch',Yii::$app->request->queryParams)
&& !empty($trainerSearch = Yii::$app->request->queryParams['TrainerSearch']))
{
if (array_key_exists('specialties',$trainerSearch) && !empty($specialities = $trainerSearch['specialties']))
{
foreach ($trainers as $trainer) {
$specialties = $trainer->trainerSpecialtiesArray;
$trainer->match = $this->caluclateRelevance($specialties);
}
}
}
return $this->render('find', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
結果查詢
SELECT DISTINCT * FROM `trainer` WHERE `gender`='0' HAVING ST_Distance_Sphere(POINT(-123.3836214,48.418248899999995), PointFromText(CONCAT('POINT(',longitude,' ',latitude,')'))) < 59000 LIMIT 2`
生成的記錄用於半徑計算,但是我也需要由geo函數計算的距離。 我嘗試使用as關鍵字,但是它一直在中斷查詢。
對於計算列,您必須在查詢中添加適當的選擇代碼
$query->->addSelect(["*",
"ST_Distance_Sphere(POINT($this->longitude ,
$this->latitude ),
PointFromText(CONCAT('POINT(',longitude,' ',latitude,')')))as distance"]);
然后顯示結果
首先,您應該在模型中添加一個公共變量,例如:
class TrainerExtend extends \yii\db\ActiveRecord
{
public $distance; // codice di stato del codice fiscale
......
public static function tableName()
{
....
其次,您可以在視圖中使用距離作為模型屬性,例如:gridview
<?= GridView::widget([
'dataProvider' => $dataProvider,
......
'columns' => [
.....
'distance',
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.