Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

CHỌN và liệt kê con và mẹ

Hãy thử fiddle này http://sqlfiddle.com/#!2/0a9c5/16 , mã sql bên dưới

SELECT c.rule_id, c.rule_title, GROUP_CONCAT(r.rule_title)
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
GROUP BY c.rule_id
ORDER BY c.cat_position, c.rule_position;

cố ý bỏ qua php-ization của mã để duy trì tô sáng cú pháp, điều này dường như không hoạt động.

Nếu bạn vượt quá kích thước group_concat tối đa cho phép, bạn có thể tăng nó lên hoặc sử dụng phiên bản sau và thực hiện thêm một chút xử lý trong php:

SELECT c.rule_id, c.rule_title, r.rule_title as r_rule_title
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
ORDER BY c.cat_position, c.rule_position;

và trong php, chỉ cung cấp mã khung, hãy điền vào các giá trị thực, giả sử bạn sử dụng pdo và var pdostatement của bạn được đặt tên là $query :

$old_rule_id = null;
$rrt = array(); // will contain all r.rule_titles for a give c.rule_id
while( ($i = $query->fetch(PDO::FETCH_OBJ)) !== false ) {
    if( $old_rule_id != $i->rule_id ) {
        if( count($rrt) ) {
            echo ... all the data for previous rule from $rrt ...
            echo ... end of previous element ...
            $rrt = array(); // empty it to collect new data
        }
        echo ... start of current element use data from $i->rule_id and $i->rule_title ...
        $old_rule_id = $rule_id;
    }
    $rrt[] = $i->r_rule_title;
}
// the following is the same if from inside the while, minus reinitialization of $rrt;
if( count($rrt) ) {
    echo ... all the data for previous rule from $rrt ...
    echo ... end of previous element ...
}

thay thế nội dung giữa ... bằng mã hợp lệ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. utf8_bin so với utf_unicode_ci

  2. Các ký tự đại diện có thể được sử dụng trên tên bảng cho GRANT trong MySQL không

  3. Người chọn người trúng thưởng vé xổ số PHP

  4. Lưu trữ JSON trong cơ sở dữ liệu so với việc có một cột mới cho mỗi khóa

  5. Sự cố khi tạo truy vấn MySQL trong Symfony có chứa JOIN và RAND ()