使用ORDER BY的SQL

时间:2016-03-13 11:16:18

标签: mysql pdo

有3种不同的过滤器: scale = (camera.inOrthographicMode == true)? 100 : worldPosition.distanceTo(camPosition ) / 6 * scope.size; booksauthorsstores列表),我可以一次性使用它们,也可以只使用一次或两次他们,所以我使用UNION汇集所有查询

select

如果require('database.php'); $books_ids = $authors_ids = $stores_ids = []; if(isset($_POST['books'])){ $books_ids = $_POST["books"]; } if(isset($_POST['authors'])){ $authors_ids = $_POST["authors"]; } if(isset($_POST['stores'])){ $stores_ids = $_POST["stores"]; } $query = ""; if( !empty( $books_ids )) { $books_ids_in = implode(',', array_fill(0, count($books_ids), '?')); $query .= "SELECT b.id, b.`name`, b.`year`, GROUP_CONCAT(DISTINCT a.`name`) AS author_names, GROUP_CONCAT(DISTINCT s.`name`) AS store_names, 'book' as param FROM books AS b LEFT JOIN books_authors AS b_a ON b.id = b_a.book_id LEFT JOIN authors AS a ON a.id = b_a.author_id LEFT JOIN books_stores AS b_s ON b.id = b_s.book_id LEFT JOIN stores AS s ON s.id = b_s.store_id WHERE b.id IN (". $books_ids_in .") GROUP BY b.id"; } if( !empty( $authors_ids ) ) { $authors_ids_in = implode(',', array_fill(0, count($authors_ids), '?')); if (!empty($query)) { $query .= " UNION "; } $query .= "SELECT b.id, b.`name`, b.`year`, GROUP_CONCAT(DISTINCT a.`name`) AS author_names, GROUP_CONCAT(DISTINCT s.`name`) AS store_names, 'author' as param FROM books AS b LEFT JOIN books_authors AS b_a ON b.id = b_a.book_id LEFT JOIN authors AS a ON a.id = b_a.author_id LEFT JOIN books_stores AS b_s ON b.id = b_s.book_id LEFT JOIN stores AS s ON s.id = b_s.store_id WHERE b.id IN ( SELECT DISTINCT book_id FROM books_authors WHERE author_id IN (". $authors_ids_in .") ) GROUP BY b.id"; } if( !empty( $stores_ids ) ) { $stores_ids_in = implode(',', array_fill(0, count($stores_ids), '?')); if (!empty($query)) { $query .= " UNION "; } $query .= "SELECT b.id, b.`name`, b.`year`, GROUP_CONCAT(DISTINCT a.`name`) AS author_names, GROUP_CONCAT(DISTINCT s.`name`) AS store_names, 'store' as param FROM books AS b LEFT JOIN books_authors AS b_a ON b.id = b_a.book_id LEFT JOIN authors AS a ON a.id = b_a.author_id LEFT JOIN books_stores AS b_s ON b.id = b_s.book_id LEFT JOIN stores AS s ON s.id = b_s.store_id WHERE b.id IN ( SELECT DISTINCT book_id FROM books_stores WHERE store_id IN (". $stores_ids_in .") ) GROUP BY b.id"; } if( !empty( $query )) { $query .= " ORDER BY b.id"; $param_array = array_merge($books_ids, $authors_ids, $stores_ids); $stmt = $conn->prepare($query); $stmt->execute($param_array); $results = $stmt->fetchAll(); echo json_encode($results); } $conn = null; 不为空,我会在$query末尾添加ORDER BY,如果我只使用一个过滤器,则会有效,但如果我使用2个或更多过滤器,则错误< / p>

$query .= " ORDER BY b.id";

如果我尝试在Fatal error: Uncaught exception 'PDOException' with message SQLSTATE[42000]: Syntax error or access violation: 1250 Table 'b' from one of the SELECTs cannot be used in field list' in C:\xampp\htdocs\bookstore\filter.php:102 Stack trace: #0 C:\xampp\htdocs\bookstore\filter.php(102): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\bookstore\filter.php on line 102

的每个部分末尾添加ORDER BY b.id

另一个错误

$query

如何在这里添加'ORDER BY'?

0 个答案:

没有答案