将sql查询转换为codeigniter活动记录

时间:2018-02-12 05:33:44

标签: codeigniter-3

i want to convert this sql query to codeigniter active records 
SELECT`s.total`,`s.is_completed`,`p.tot`,`p.completed`,`st.uid`,`st.unm`,`sl.verify`,`sl.saldate` FROM (SELECT sum(`count`) As total, sum(`is_completed`) As is_completed, `user_id` AS stepid FROM stepvice) AS s LEFT OUTER JOIN (SELECT `id` AS uid,`name` AS unm from `staffcredentials`) As st ON `st.uid`='s.stepid' LEFT OUTER JOIN (SELECT sum(`count`) As tot, sum(`is_completed`) As completed, `user_id` AS pageid FROM pagevice) AS p ON `p.pageid`='s.stepid' LEFT OUTER JOIN (SELECT `check` AS verify, `user_id` AS salid,`date` AS saldate  FROM `staffsalary`) As sl ON `sl.salid`='p.pageid' WHERE `st.uid`='$ids[$i]'"

当我在$ this-> db-> query()中包含此查询时,它显示错误,但此查询在mysql中完美运行

1 个答案:

答案 0 :(得分:0)

您的查询包含

  

`(严重重音)

而不是import draco_logger.LeafLogger; import javafx.collections.ObservableList; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.input.MouseEvent; import javafx.stage.Screen; import javafx.stage.Stage; //originally created by Alexander Berg //https://stackoverflow.com/questions/19455059/allow-user-to-resize-an-undecorated-stage // //modified by Joseph Adomatis //extracted ResizeListener class and made public, added arg for CWinMaxButton for detecting Maximized Window, using my own logger //changed MouseDragged routines and private variables to make use of screen absolute values instead of relative values //MouseDragged also updated to respect Min/Max sizes public class ResizeListener implements EventHandler<MouseEvent> { public ResizeListener(Stage stage) { LeafLogger log = new LeafLogger("ResizeListener", "Constructor(Stage)"); this.stage = stage; this._max = null; isPressed = false; cursorEvent = Cursor.DEFAULT; border = 3; stageStartH = 0; stageStartW = 0; stageStartX = 0; stageStartY = 0; this.addResizeListener(); log.Wither(); } public void AddMaxButton(CWinMaxButton max){ this._max = max; } private void addResizeListener() { LeafLogger log = new LeafLogger("ResizeListener", "addResizeListener"); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_MOVED, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_PRESSED, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_DRAGGED, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_ENTERED, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_EXITED, this); this.stage.getScene().addEventHandler(MouseEvent.MOUSE_EXITED_TARGET, this); ObservableList<Node> children = this.stage.getScene().getRoot().getChildrenUnmodifiable(); for (Node child : children) { addListenerDeeply(child); } log.Wither(); } private void addListenerDeeply(Node node) { LeafLogger log = new LeafLogger("ResizeListener", "addListenerDeeply"); node.addEventHandler(MouseEvent.MOUSE_MOVED, this); node.addEventHandler(MouseEvent.MOUSE_PRESSED, this); node.addEventHandler(MouseEvent.MOUSE_DRAGGED, this); node.addEventHandler(MouseEvent.MOUSE_ENTERED, this); node.addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET, this); node.addEventHandler(MouseEvent.MOUSE_EXITED, this); node.addEventHandler(MouseEvent.MOUSE_EXITED_TARGET, this); if (node instanceof Parent) { Parent parent = (Parent) node; ObservableList<Node> children = parent.getChildrenUnmodifiable(); for (Node child : children) { addListenerDeeply(child); } } log.Wither(); } @Override public void handle(MouseEvent mouseEvent) { LeafLogger log = new LeafLogger("ResizeListener","handle"); // Check if we registered a maximize button if(this._max != null){ // Check with the maximize button to see if window is currently maximized if(this._max.GetMaximized()){ // We do not resize Maximized windows log.Wither(); return; } } EventType<? extends MouseEvent> mouseEventType = mouseEvent.getEventType(); Scene scene = stage.getScene(); // set minHeight vars in such a way as to ensure that there is always a border over which we can continue to resize again // if stage MinHeight were 0 and you resized to 0, the draggable zone is gone and you cannot resize anymore // so regardless of app preference, we artificially set min sizes to leave all borders double minHeight = stage.getMinHeight() > (border*2) ? stage.getMinHeight() : (border*2); double minWidth = stage.getMinWidth() > (border*2) ? stage.getMinWidth() : (border*2); double maxHeight = stage.getMaxHeight(); double maxWidth = stage.getMaxWidth(); // capture the position of the mouse cursor relative to the stage anchor point at the time of the event double mouseEventX = mouseEvent.getSceneX(); double mouseEventY = mouseEvent.getSceneY(); // capture the current scene Height and Width double sceneHeight = scene.getHeight(); double sceneWidth = scene.getWidth(); // capture the screen max visual Height and Width double screenHeight = Screen.getPrimary().getVisualBounds().getHeight(); double screenWidth = Screen.getPrimary().getVisualBounds().getWidth(); // if MOUSE_MOVED and its new position is over one of the stage borders, we want to update the cursor to be one of the resize variety if (MouseEvent.MOUSE_MOVED.equals(mouseEventType)) { if (mouseEventX < border && mouseEventY < border) { cursorEvent = Cursor.NW_RESIZE; } else if (mouseEventX < border && mouseEventY > sceneHeight - border) { cursorEvent = Cursor.SW_RESIZE; } else if (mouseEventX > sceneWidth - border && mouseEventY < border) { cursorEvent = Cursor.NE_RESIZE; } else if (mouseEventX > sceneWidth - border && mouseEventY > sceneHeight - border) { cursorEvent = Cursor.SE_RESIZE; } else if (mouseEventX < border) { cursorEvent = Cursor.W_RESIZE; } else if (mouseEventX > sceneWidth - border) { cursorEvent = Cursor.E_RESIZE; } else if (mouseEventY < border) { cursorEvent = Cursor.N_RESIZE; } else if (mouseEventY > sceneHeight - border) { cursorEvent = Cursor.S_RESIZE; } else { cursorEvent = Cursor.DEFAULT; } scene.setCursor(cursorEvent); // if MOUSE_EXITED the stage screen area and we'd pressed but did not release the mouse button, then we want to maintain our current cursor // otherwise, since the mouse is outside our stage, we return it to the default cursor } else if(MouseEvent.MOUSE_EXITED.equals(mouseEventType) || MouseEvent.MOUSE_EXITED_TARGET.equals(mouseEventType)){ if(!isPressed){ scene.setCursor(Cursor.DEFAULT); } // similarly, if MOUSE ENTERED the stage screen area and we'd pressed but did not release the mouse button, then we want to maintain the current cursor // otherwise, since the mouse is coming back to us, we dont want to keep whatever other cursor may have been set by other windows so we return to default } else if(MouseEvent.MOUSE_ENTERED.equals(mouseEventType) || MouseEvent.MOUSE_ENTERED_TARGET.equals(mouseEventType)){ if(!isPressed){ scene.setCursor(Cursor.DEFAULT); } // if MOUSE_PRESSED we might need to keep track that we pressed it and are initiating a potential drag/resize event } else if (MouseEvent.MOUSE_PRESSED.equals(mouseEventType)) { // right now we dont care if mouse was pressed, but we might boolean iCare = false; // check the cursor type, if it is a resize cursor then mouse is over a border and we DO care that we pressed the mouse if(Cursor.N_RESIZE.equals(cursorEvent) || Cursor.S_RESIZE.equals(cursorEvent) || Cursor.E_RESIZE.equals(cursorEvent) || Cursor.W_RESIZE.equals(cursorEvent)){ iCare = true; } else if(Cursor.NE_RESIZE.equals(cursorEvent) || Cursor.NW_RESIZE.equals(cursorEvent) || Cursor.SE_RESIZE.equals(cursorEvent) || Cursor.SW_RESIZE.equals(cursorEvent)){ iCare = true; } // if we care that we pressed the mouse, we need to capture the initial data that will be used by our drag event handler to actually resize the window if(iCare){ stageStartH = stage.getHeight(); stageStartW = stage.getWidth(); stageStartX = stage.getX(); stageStartY = stage.getY(); mouseStartX = mouseEvent.getScreenX(); mouseStartY = mouseEvent.getScreenY(); isPressed = true; } // if MOUSE_RELEASED, we don't care what the mouse does anymore so release our flag } else if(MouseEvent.MOUSE_RELEASED.equals(mouseEventType)){ isPressed = false; // if MOUSE_DRAGGED, this handler might have something to do } else if (MouseEvent.MOUSE_DRAGGED.equals(mouseEventType)) { // if the cursor is still default, then this handler doesnt care about the drag event so ignore everything else // this handler only cares if the cursor is of the resize variety if(Cursor.DEFAULT.equals(cursorEvent)){ return; } // Check if there is a vertical component to the window resize // The only time there isn't a vertical component is if the mouse is strictly on the west or east side of the stage if (!Cursor.W_RESIZE.equals(cursorEvent) && !Cursor.E_RESIZE.equals(cursorEvent)) { // There is a vertical component. // If we are resizing the north side however, we will be resetting both the Y coordinate of the stage anchor as well as the stage height if (Cursor.NW_RESIZE.equals(cursorEvent) || Cursor.N_RESIZE.equals(cursorEvent) || Cursor.NE_RESIZE.equals(cursorEvent)) { double mouseDifY = mouseStartY - stageStartY; // we are moving the north side // figure out where the south side of the stage is double finalY = stageStartY + stage.getHeight(); // we are free to move the north side until it reaches the point where the distance to the south side is greater than maxHeight // OR, we run into the top of the screen double minStageY = (finalY - maxHeight) > 0 ? (finalY - maxHeight): 0; double minMouseY = minStageY + mouseDifY; // we are free to move the north side until it reaches the point where the distance to the south side is less than minHeight double maxStageY = finalY - minHeight; double maxMouseY = maxStageY + mouseDifY; // capture the absolute position of the mouse at the time of the event double curMouseY = mouseEvent.getScreenY(); if(curMouseY < minMouseY){ stage.setY(minStageY); // Our mouse passed the value at which we would breach max height // We dont want the curMouseY to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseY = minMouseY; } else if(curMouseY > maxMouseY){ stage.setY(maxStageY); // Our mouse passed the value at which we would breach min height // We dont want the curMouseY to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseY = maxMouseY; } else { stage.setY(curMouseY - mouseDifY); } double newY = stage.getY(); double newHeight = finalY - newY; stage.setHeight(newHeight); // Our stage and mouse start variables were set via the mouse pressed event handle // If we did above procedure in the mouse released event handle, it would work, but there would be no display update till mouse released. // By using mouse dragged event handle, we get display update each event cycle... but we have to constantly update our start variables for the next cycle // While dragging mouse, you aren't releasing and re-pressing it to update the variables.... stageStartY = stage.getY(); stageStartH = stage.getHeight(); mouseStartY = curMouseY; } else { // Else, we are resizing the south side, and the Y coordinate remains fixed. We only change the stage height // figure out where the current south side actually is double curFinalY = stageStartY + stageStartH; double mouseDifY = mouseStartY - curFinalY; // we are free to move the north side until it reaches the point where the distance to the south side is greater than maxHeight // OR, we run into the bottom of the screen double maxFinalY = (stageStartY + maxHeight) < screenHeight ? (stageStartY + maxHeight) : screenHeight; double maxMouseY = maxFinalY + mouseDifY; // we are free to move the south side until the point where the distance from anchor to south side is less than minHeight double minFinalY = stageStartY + minHeight; double minMouseY = minFinalY + mouseDifY; // capture the absolute position of the mouse at the time of the event double curMouseY = mouseEvent.getScreenY(); if (curMouseY < minMouseY) { stage.setHeight(minHeight); // Our mouse passed the value at which we would breach min height // We don't want the curMouseY to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseY = minMouseY; } else if(curMouseY > maxMouseY){ double newFinalY = maxMouseY - mouseDifY; double newHeight = newFinalY - stageStartY; stage.setHeight(newHeight); // Our mouse passed the value at which we would breach max height // We don't want the curMouseY to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseY = maxMouseY; } else { double newFinalY = curMouseY - mouseDifY; double newHeight = newFinalY - stageStartY; stage.setHeight(newHeight); } // Our stage and mouse start variables were set via the mouse pressed event handle // If we did above procedure in the mouse released event handle, it would work, but there would be no display update till mouse released. // By using mouse dragged event handle, we get display update each event cycle... but we have to constantly update our start variables for the next cycle // While dragging mouse, you aren't releasing and re-pressing it to update the variables.... stageStartY = stage.getY(); stageStartH = stage.getHeight(); mouseStartY = curMouseY; } } // Check if there is a horizontal component to the window resize // The only time there isn't a horizontal component is if the mouse is strictly on the north or south side of the stage. if (!Cursor.N_RESIZE.equals(cursorEvent) && !Cursor.S_RESIZE.equals(cursorEvent)) { // There is a horizontal component. // If we are resizing the west side however, we will be resetting both the X coordinate of the stage anchor as well as the stage width. if (Cursor.NW_RESIZE.equals(cursorEvent) || Cursor.W_RESIZE.equals(cursorEvent) || Cursor.SW_RESIZE.equals(cursorEvent)) { // we are moving the west side // figure out where the east side of the stage is double mouseDifX = mouseStartX - stageStartX; double finalX = stageStartX + stageStartW; // we are free to move the west side until it reaches the point where the distance to the east side is greater than maxWidth // OR, we run into the left of the screen double minStageX = (finalX - maxHeight) > 0 ? (finalX - maxHeight): 0; double minMouseX = minStageX + mouseDifX; // we are free to move the west side until it reaches the point where the distance to the east side is less than minWidth double maxStageX = finalX - minWidth; double maxMouseX = maxStageX + mouseDifX; // capture the absolute position of the mouse at the time of the event double curMouseX = mouseEvent.getScreenX(); if(curMouseX < minMouseX){ stage.setX(minStageX); // Our mouse passed the value at which we would breach max width // We don't want the curMouseX to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseX = minMouseX; } else if(curMouseX > maxMouseX){ stage.setX(maxStageX); curMouseX = maxMouseX; // Our mouse passed the value at which we would breach min width // We don't want the curMouseX to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position } else { stage.setX(curMouseX - mouseDifX); } double newX = stage.getX(); double newWidth = finalX - newX; stage.setWidth(newWidth); // Our stage and mouse start variables were set via the mouse pressed event handle // If we did above procedure in the mouse released event handle, it would work, but there would be no display update till mouse released. // By using mouse dragged event handle, we get display update each event cycle... but we have to constantly update our start variables for the next cycle // While dragging mouse, you aren't releasing and re-pressing it to update the variables.... stageStartX = stage.getX(); stageStartW = stage.getWidth(); mouseStartX = curMouseX; } else { // Else, we are resizing the east side, and the X coordinate remains fixed. We only change the stage width. // figure out where the current east side actually is double curFinalX = stageStartX + stageStartW; double mouseDifX = mouseStartX - curFinalX; // we are free to move the east side until the point where the distance from anchor to east side is less than minWidth double minFinalX = stageStartX + minWidth; double minMouseX = minFinalX + mouseDifX; // we are free to move the east side until it reaches the point where the distance to the west side is greater than maxWidth // OR, we run into the right of the screen double maxFinalX = (stageStartX + maxWidth) < screenWidth ? (stageStartX + maxWidth) : screenWidth; double maxMouseX = maxFinalX + mouseDifX; // capture the absolute position of the mouse at the time of the event double curMouseX = mouseEvent.getScreenX(); if (curMouseX < minMouseX) { stage.setWidth(minWidth); curMouseX = minMouseX; // Our mouse passed the value at which we would breach min width // We don't want the curMouseX to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position } else if(curMouseX > maxMouseX){ double newFinalX = maxMouseX - mouseDifX; double newWidth = newFinalX - stageStartX; stage.setWidth(newWidth); // Our mouse passed the value at which we would breach max width // We don't want the curMouseY to update any more until the mouse is back over the border. // Otherwise, the window border would resize relative to mouse movement, not relative to absolute mouse position curMouseX = maxMouseX; } else { double newFinalX = curMouseX - mouseDifX; double newWidth = newFinalX - stageStartX; stage.setWidth(newWidth); } // Our stage and mouse start variables were set via the mouse pressed event handle // If we did above procedure in the mouse released event handle, it would work, but there would be no display update till mouse released. // By using mouse dragged event handle, we get display update each event cycle... but we have to constantly update our start variables for the next cycle // While dragging mouse, you aren't releasing and re-pressing it to update the variables.... stageStartX = stage.getX(); stageStartW = stage.getWidth(); mouseStartX = curMouseX; } } } log.Wither(); } // <editor-fold defaultstate="collapsed" desc="***** Private Variable Declarations *****"> private boolean isPressed; private Cursor cursorEvent; private CWinMaxButton _max; private double mouseStartX; private double mouseStartY; private double stageStartH; private double stageStartW; private double stageStartX; private double stageStartY; private final int border; private final Stage stage; // </editor-fold> } (单引号)

这很可能是造成错误的原因。

您应该用单引号('

替换它

试试这个

'