Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да сравним две полета/колони в условие?

Всеки път, когато срещнете проблеми със заявките, проверете какви заявки всъщност се генерират (например с помощта на DebugKit ). Освен ако не е изразен обект, дясната страна на условието винаги ще бъде обвързана като параметър, т.е. сравнявате с низов литерал:

Pupils.school_id = 'Schools.id'

По принцип за правилна съвместимост с автоматично цитиране имената на колоните трябва да бъдат изрази на идентификатор. Докато лявата страна автоматично ще се обработва правилно, дясната ще трябва да се обработва ръчно.

Във вашия конкретен случай можете лесно да използвате QueryExpression::equalFields() , което се отнася точно за това, което се опитвате да направите, сравнявайки полета/колони:

->where(function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) {
    return $exp->equalFields('Pupils.school_id', 'Schools.id');
})

Възможно е също така да създавате ръчно изрази на идентификатор, като просто ги инстанцирате:

->where([
    'Pupils.school_id' => new \Cake\Database\Expression\IdentifierExpression('Schools.id')
])

или от CakePHP 3.6 чрез Query::identifier() метод:

->where([
    'Pupils.school_id' => $query->identifier('Schools.id')
])

И накрая, винаги можете да предавате стойност на един низ, която основно се вмъква в заявката като необработен SQL, но в този случай идентификаторите няма да бъдат обект на автоматично цитиране на идентификатор:

->where([
    'Pupils.school_id = Schools.id'
])

Вижте също




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избягвайте повтарящи се записи, показвани в MySQL / PHP

  2. Има ли някакъв начин за връщане назад след комит в MySQL?

  3. Как да премахнете две дублиращи се колони

  4. Как да спрем/стартираме MySQL с помощта на MySQL Workbench

  5. За влизане GET или POST?