Как конвертировать MySQL Query в синтаксис CodeIgniter? - PullRequest
0 голосов
/ 26 сентября 2019

Я сейчас работаю над запросом MySQL.Когда он уже предоставляет правильные необходимые данные, я понял, что их необходимо преобразовать в синтаксис CodeIgniter, чтобы я мог использовать их в пользовательской модели в GroceryCRUD.Я попытался вручную ввести все значения select, join и where для каждого подходящего оператора

(e.g. $this->db->select("tul1.u_Uname AS MSN, and so on...) 

, но это не работает.Я также попытался использовать

$this->db->query(and my query goes here)

мой код работает нормально, но GroceryCRUD не будет отображать поля.Я попытался выполнить простой запрос, следующий синтаксису по умолчанию

(e.g $this->db->select("fgrade_Id, CONCAT_WS ( ' ', tbluserlist.u_LastName, tbluserlist.u_FirstName ) AS Student", false); 

, и смог отобразить результат, но мне не удалось преобразовать фактический запрос, который мне был необходим для указанной задачи.Фактический запрос, над которым я работаю:

SELECT tul1.u_Uname AS MSN, REPLACE(CONCAT_WS(' ',  CONCAT_WS('',tul1.u_LastName, ','),  IF (tul1.u_SuffixName = 'NONE' OR tul1.u_SuffixName LIKE '%n/a%' OR tul1.u_SuffixName LIKE '%n\\a%', CONCAT_WS('',tul1.u_FirstName, ','), tul1.u_FirstName), IF (tul1.u_SuffixName = 'NONE' OR tul1.u_SuffixName LIKE '%n/a%' OR tul1.u_SuffixName LIKE '%n\\a%', '',  CONCAT_WS('', tul1.u_SuffixName, ',')), IF (tul1.u_MiddleName = 'NONE' OR tul1.u_MiddleName LIKE '%n/a%' OR tul1.u_SuffixName LIKE '%n\\a%', '',  tul1.u_MiddleName)), '  ', ' ') AS Student, CONCAT_WS(' ',  sc.course_RefNo, '~',  sc.course_Title) AS Course, REPLACE(CONCAT_WS(' ',  CONCAT_WS('',tul2.u_LastName, ','),  IF (tul2.u_SuffixName = 'NONE' OR tul2.u_SuffixName LIKE '%n/a%' OR tul2.u_SuffixName LIKE '%n\\a%', CONCAT_WS('',tul2.u_FirstName, ','), tul2.u_FirstName), IF (tul2.u_SuffixName = 'NONE' OR tul2.u_SuffixName LIKE '%n/a%' OR tul2.u_SuffixName LIKE '%n\\a%', '',  CONCAT_WS('', tul2.u_SuffixName, ',')), IF (tul2.u_MiddleName = 'NONE' OR tul2.u_MiddleName LIKE '%n/a%' OR tul2.u_SuffixName LIKE '%n\\a%', '',  tul2.u_MiddleName)), '  ', ' ') AS Instructor, tfg.fgrade_Grade AS FinalGrade, tfl.fl_AY AS AY, tfl.fl_SemId AS SemId, ss.yrsem_Sem AS Semester, tfg.fgrade_DateEncoded, tfg.fgrade_Visible, tfg.fgrade_Id FROM egmsdbdev.tblfinalgrade AS tfg INNER JOIN egmsdbdev.tblfacultyloading AS tfl ON tfg.fgrade_FLId = tfl.fl_Id INNER JOIN egmsdbdev.tbluserlist AS tul1 ON tul1.u_SpId = tfg.fgrade_SpId INNER JOIN egmsdbdev.set_course AS sc ON tfl.fl_CourseId = sc.course_Id INNER JOIN egmsdbdev.tbluserlist AS tul2 ON tfl.fl_FacultyId = tul2.u_Id INNER JOIN dbris.set_yrsem AS ss ON tfl.fl_SemId = ss.yrsem_id LEFT JOIN egmsdbdev.tblfinalgrade tfg2 ON (tfg.fgrade_SpId = tfg2.fgrade_SpId AND tfg.fgrade_FLId = tfg2.fgrade_FLId AND tfg.fgrade_Id<tfg2.fgrade_Id ) WHERE tfl.fl_CourseId NOT IN ((SELECT nnc_CourseId from set_nonnumericcourse)) AND tfg2.fgrade_Id IS NULL ORDER BY Student, Course

Заранее благодарен за помощь.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Наконец я смог преобразовать это!Спасибо за предложения ..:)

        $this->db->select('
        tul1.u_Uname AS MSN,
        REPLACE(CONCAT_WS(" ",  CONCAT_WS("",tul1.u_LastName, ","),  IF (tul1.u_SuffixName = "NONE" OR tul1.u_SuffixName LIKE "%n/a%" OR tul1.u_SuffixName LIKE "%n\\a%", CONCAT_WS("",tul1.u_FirstName, ","), tul1.u_FirstName),
                IF (tul1.u_SuffixName = "NONE" OR tul1.u_SuffixName LIKE "%n/a%" OR tul1.u_SuffixName LIKE "%n\\a%", "",  CONCAT_WS("", tul1.u_SuffixName, ",")),
                IF (tul1.u_MiddleName = "NONE" OR tul1.u_MiddleName LIKE "%n/a%" OR tul1.u_SuffixName LIKE "%n\\a%", "",  tul1.u_MiddleName) 
                        ), "  ", " ") AS student,
        CONCAT_WS(" ",  sc.course_RefNo, "~",  sc.course_Title) AS Course,
        REPLACE(CONCAT_WS(" ",  CONCAT_WS("",tul2.u_LastName, ","),  IF (tul2.u_SuffixName = "NONE" OR tul2.u_SuffixName LIKE "%n/a%" OR tul2.u_SuffixName LIKE "%n\\a%", CONCAT_WS("",tul2.u_FirstName, ","), tul2.u_FirstName),
                IF (tul2.u_SuffixName = "NONE" OR tul2.u_SuffixName LIKE "%n/a%" OR tul2.u_SuffixName LIKE "%n\\a%", "",  CONCAT_WS("", tul2.u_SuffixName, ",")),
                IF (tul2.u_MiddleName = "NONE" OR tul2.u_MiddleName LIKE "%n/a%" OR tul2.u_SuffixName LIKE "%n\\a%", "",  tul2.u_MiddleName) 
                        ), "  ", " ") AS Instructor,
        tfg.fgrade_Grade AS FinalGrade,
        tfl.fl_AY AS AY,
        tfl.fl_SemId AS SemId,
        ss.yrsem_Sem AS Semester,
        tfg.fgrade_DateEncoded,
        tfg.fgrade_Visible,
        tfg.fgrade_Id
    ', false);
    $this->db->from('egmsdbdev.tblfinalgrade AS tfg');
    $this->db->join('egmsdbdev.tblfacultyloading AS tfl', 'tfg.fgrade_FLId = tfl.fl_Id', 'inner');
    $this->db->join('egmsdbdev.tbluserlist AS tul1', 'tul1.u_SpId = tfg.fgrade_SpId', 'inner');
    $this->db->join('egmsdbdev.set_course AS sc', 'tfl.fl_CourseId = sc.course_Id', 'inner');
    $this->db->join('egmsdbdev.tbluserlist AS tul2', 'tfl.fl_FacultyId = tul2.u_Id', 'inner');
    $this->db->join('dbris.set_yrsem AS ss', 'tfl.fl_SemId = ss.yrsem_id', 'inner');
    $this->db->join('egmsdbdev.tblfinalgrade AS tfg2', 'tfg.fgrade_SpId = tfg2.fgrade_SpId AND tfg.fgrade_FLId = tfg2.fgrade_FLId AND tfg.fgrade_Id<tfg2.fgrade_Id', 'left');
    $this->db->where("tfl.fl_CourseId NOT IN ((SELECT nnc_CourseId from set_nonnumericcourse))");
0 голосов
/ 26 сентября 2019

Перед отладкой у меня есть пара вопросов.

  1. Вы пробовали MySQL Query в СУБД, такой как MySQL sv, phpmyadmin и так далее?если у вас нет, пожалуйста, сначала сделайте это там, чтобы увидеть, работает ли он, а затем скопируйте / вставьте код.
  2. В документации CodeIgniter для Query Builder указано, что вам нужносделайте $this->db->select('title, content, date'); $query = $this->db->get('mytable');, из того, что я вижу в вашем посте, вы пробовали только первую часть, не указав таблицу, которую вы пытаетесь использовать.
  3. Пожалуйста, попробуйте дать вашему вопросу лучший формат, этот запросможет отображаться лучше, просто нажмите SHIFT + ВВОД по ключевым словам, таким как ЗАМЕНА, или вы можете сделать это через запятую, а затем с этим форматированием просто выделите весь текст и нажмите {}, чтобы задать формат кода для текста..
  4. Если вы попробуете подход синтаксиса запроса MySQL, я рекомендую следующее: $query = "Your query"; echo $query; если вы сделаете это, вы сможете легче отладить запрос, даже лучше, если вы объедините его с 1элемент, который я перечислил (пробуя запрос в программе, такой как phpmyadmin).Иногда мои запросы не работают из-за пропущенных пропущенных '', "", запятых и т. Д., И если я использую echo, я могу увидеть, как будет выполняться мой запрос, прежде чем выполнить фактический запрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...