【问题标题】:Converting SQL query to CodeIgniter query将 SQL 查询转换为 CodeIgniter 查询
【发布时间】:2019-03-06 01:58:52
【问题描述】:

我在为我在 SQL Server 中创建的这个查询找到可靠的解决方案时遇到了麻烦,现在有人可以帮我将此查询转换为 codeigniter 查询,任何帮助将不胜感激

SELECT DISTINCT
    s1.idnumber,
    s1.firstname,
    s1.middlename,
    s1.lastname,
    (
        SELECT DISTINCT 
            SUM(s4.point) 
        FROM students s3 
        LEFT JOIN section_student s4 
        ON s3.id = s4.student_id
        WHERE s3.id = s1.id AND s4.schoolyear = s2.schoolyear AND s4.semester = s2.semester
    ) AS 'point'
FROM
students s1
LEFT JOIN section_student s2
ON s1.id = s2.student_id
WHERE s2.schoolyear = '2018-2019' AND s2.semester = '2nd'
GO

*已编辑

this is the result of my query

and the structure of my database

试图检索 2018-2019 学年和第二学期内的所有数据

【问题讨论】:

  • 在不知道你的表结构、数据、预期结果/输出等的情况下很难提供任何帮助。也就是说,CI 的查询构建器没有嵌套选择的方法,所以你需要构建常规 SQL 查询和查询构建器方法的混合体(基本上,最外层的查询及其条件是查询构建器的,而嵌套的则不是)
  • 您的查询有效吗?
  • 此查询在 sql svr 中完美运行

标签: php sql-server codeigniter


【解决方案1】:

试试这个,

$this->db->select(" DISTINCT s1.idnumber,s1.firstname,s1.middlename,s1.lastname,(SELECT DISTINCT  SUM(s4.point)  FROM students s3  LEFT JOIN section_student s4  ON s3.id = s4.student_id WHERE s3.id = s1.id AND s4.schoolyear = s2.schoolyear AND s4.semester = s2.semester) AS point");
  $this->db->from('students s1');
  $this->db->join('section_student s2','s1.id = s2.student_id','left');
  $this->db->where('s2.schoolyear','2018-2019');
  $this->db->where('s2.semester','2nd');
  $query = $this->db->get();
  echo $this->db->last_query();die;//it will give you query please copy this and run in your db
  if ($query->num_rows() > 0) {
       return $query->result();
  } else {
       return array();
  }

【讨论】:

  • 您是否将您的查询与 last_query 进行了比较?你能告诉我你从 CI 方法得到的错误吗?
  • 删除第一个 SELECT 因为方法 select() 添加了该关键字。那么$this->db->select("SELECT DISTINCT...变成$this->db->select("DISTINCT...
  • 是的,几乎一样。这是我得到的错误:发生数据库错误错误号:42000/102 [Microsoft][SQL Server 的 ODBC 驱动程序 13][SQL Server]'.' 附近的语法不正确。
  • 我删除了第一个 SELECT 然后它又出现了同样的错误
  • 在@M.Hemant 提供的选择语句中删除'point' 周围的单引号或用反斜杠转义它们(例如\'point\'),应该可以解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2017-07-25
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多