奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

php語言

Yii2如何實現跨mysql數據庫關聯查詢排序

時間:2024-11-04 14:48:38 php語言 我要投稿
  • 相關推薦

Yii2如何實現跨mysql數據庫關聯查詢排序

  導語:Yii2如何實現跨mysql數據庫關聯查詢排序呢?下面是小編給大家提供的代碼實現教程,大家可以參考閱讀,更多詳情請關注應屆畢業生考試網。

  背景:在一個mysql服務器上(注意:兩個數據庫必須在同一個mysql服務器上)有兩個數據庫:

  memory (存儲常規數據表) 中有一個 user 表(記錄用戶信息)

  memory_stat (存儲統計數據表) 中有一個 user_stat (記錄用戶統計數據)

  現在在 user 表生成的 GridView 列表中展示 user_stat 中的統計數據

  只需要在User的model類中添加關聯public function getStat()

  {

  return $this->hasOne(UserStat::className(), ['user_id' => 'id']);

  }

  在GridView就可以這樣使用來展示統計數據

  <?= GridView::widget([

  'dataProvider' => $dataProvider,

  'columns' => [

  //其他列

  [

  'label' => '統計數據',

  'value' => function($model){

  return isset($model->stat->data) ? $model->stat->data : null;

  }

  ],

  //其他列

  ],

  ]); ?>

  現在增加了一個需求,需要在user GridView 列表中對統計數據進行排序和篩選

  若 user 和 user_stat 表在同一個數據庫下我們可以這樣做:

  UserSearch:

  public $data;

  public function rules()

  {/*{{{*/

  return [

  ['data'], 'integer'],

  //其他列

  ];

  }/*}}}*/

  public function search($params, $onlyActiveUsers = false)

  {

  $query = User::find();

  $query->joinWith(['stat']);

  $dataProvider = new ActiveDataProvider([

  'query' => $query,

  'sort' => [

  'attributes' => [

  //其他列

  'data' => [

  'asc' => [UserStat::tableName() . '.data' => SORT_ASC],

  'desc' => [UserStat::tableName() . '.data' => SORT_DESC],

  ],

  //其他列

  ],

  'defaultOrder' => [

  'id' => SORT_DESC,

  ],

  ],

  'pagination' => [

  'pageSize' => 50,

  ],

  ]);

  $this->load($params);

  if (!$this->validate()) {

  $query->where('0=1');

  return $dataProvider;

  }

  $query->filterWhere([

  //其他列

  UserStat::tableName() . '.data' => $this->data

  ]);

  return $dataProvider;

  }

  在GridView就可以這樣使用來展示統計數據,就可以排序了

  <?= GridView::widget([

  'dataProvider' => $dataProvider,

  'columns' => [

  //其他列

  [

  'label' => '統計數據',

  'attribute' => 'data',

  'value' => function($model){

  return isset($model->stat->data) ? $model->stat->data : null;

  }

  ],

  //其他列

  ],

  ]); ?>

  search 表單中添加以下列就可以篩選了

  <?php $form = ActiveForm::begin(); ?>

  //其他列

  <?= $form->field($model, 'data')?>

  //其他列

  <p class="form-group">

  <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>

  </p>

  <?php ActiveForm::end(); ?>

  然而現實是殘酷的, user 和 user_stat 表并在同一個數據庫下。

  于是就會報出這樣一個錯誤:

  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'memory.user_stat' doesn't exist

  The SQL being executed was: ...

  要在兩個數據庫(同一臺服務器)上進行關聯數據查詢,純SQL語句如下:

  代碼如下:

  select a.*,b.* from memory.user as a,memory_stat.user_stat as b where a.id=b.user_id;

  Yii2轉化成 SQL 語句時默認不會在表明前添加數據庫名,于是mysql在執行sql語句時就會默認此表在memory數據庫下。

  代碼如下:

  select a.*,b.* from memory.user as a,memory.user_stat as b where a.id=b.user_id;

  于是就出現了以上報錯信息。

  那么,如何來解決這個問題呢?

  其實很簡單,只需要重寫 user_stat 的 model 類下的 tableName() 方法就可以了。

  // 默認是這樣的

  public static function tableName()

  {

  return 'user_stat';

  }

  public static function getDb()

  {

  return Yii::$app->get('dbStat');

  }

  // 只需要在表明前添加數據庫名

  public static function tableName()

  {

  return 'memory_stat.user_stat';

  }

  public static function getDb()

  {

  return Yii::$app->get('dbStat');

  }

  // 為了提高代碼穩定性,可以這樣寫

  public static function tableName()

  {

  preg_match("/dbname=([^;]+)/i", static::getDb()->dsn, $matches);

  return $matches[1].'.user_stat';

  }

  public static function getDb()

  {

  return Yii::$app->get('dbStat');

  }

【Yii2如何實現跨mysql數據庫關聯查詢排序】相關文章:

php查詢mysql的實例09-09

關于php操作mysql執行數據庫查詢08-11

php連接mysql數據庫代碼08-01

PHP數據庫:mysql重置密碼07-20

Linux自動備份MySQL數據庫的實用方法10-08

php查詢mysql多條件判斷輸出展示實例09-06

2017計算機二級MySQL考試在MySQL數據庫比較日期的方法07-21

Php中用PDO查詢Mysql來避免SQL注入風險的方法10-27

計算機二級MySQL輔導知識:簡單查詢05-31

PHP實現搜索查詢功能的方法技巧08-01

主站蜘蛛池模板: 汤阴县| 顺昌县| 襄垣县| 大足县| 盐边县| 赤城县| 庆云县| 哈巴河县| 漠河县| 佛冈县| 永昌县| 沁水县| 海门市| 罗源县| 来凤县| 佛冈县| 桓台县| 安远县| 临潭县| 星座| 临汾市| 辉南县| 乌拉特中旗| 永宁县| 乌什县| 禄丰县| 稻城县| 衡阳市| 雷州市| 临沭县| 铜陵市| 磴口县| 新河县| 特克斯县| 郴州市| 会昌县| 天峻县| 邻水| 内黄县| 临猗县| 贡嘎县|