Mysql
 sql >> Baza danych >  >> RDS >> Mysql

WYBIERZ i wypisz dzieci i rodziców

Wypróbuj te skrzypce http://sqlfiddle.com/#!2/0a9c5/16 , kod sql poniżej

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;

celowo pominięto php-izację kodu w celu utrzymania podświetlania składni, która i tak wydaje się nie działać

Jeśli przekroczysz maksymalny dozwolony rozmiar group_concat, możesz go zwiększyć lub użyć następującej wersji i wykonać nieco więcej przetwarzania w 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;

a w php, tylko szkielet kodu, wypełnij aktualnymi wartościami, zakładając, że używasz pdo, a twoja zmienna pdostatement ma nazwę $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 ...
}

zamień rzeczy między ... poprawnym kodem



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL — identyfikowanie danych przy użyciu nazw URL, w których dane są zorganizowane w hierarchię

  2. Jak mogę przeglądać zapytania MySQL na żywo?

  3. SQL - suma niektórych wierszy minus suma innych wierszy

  4. Problem z kodowaniem UTF-8 przy użyciu PHP + MySQL

  5. Zaktualizuj MySQL bez określania nazw kolumn