Ihre Anforderung besteht darin, die Daten aus dem Produkt zu Pivotieren und product_additional-Tabellen, wobei die Spalten basierend auf den Werten in der product_additional-Tabelle dynamisch gefüllt werden. Die aktuelle Abfrage, die bedingte Aggregation mit IF() verwendet, ist nicht dynamisch und erfordert manuelle Änderungen bei jedem neuen hinzugefügten Feld.
Um eine dynamische Pivotierung in MySQL zu erreichen, haben wir kann vorbereitete Anweisungen verwenden, die es uns ermöglichen, zur Laufzeit eine Abfragezeichenfolge zu erstellen. Der folgende Code demonstriert diesen Ansatz:
-- Initialize @sql variable SET @sql = NULL; -- Dynamically create the query string by iterating over distinct `fieldname` values SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(pa.fieldname = ''', fieldname, ''', pa.fieldvalue, NULL)) AS ', fieldname ) ) INTO @sql FROM product_additional; -- Concatenate the constructed string with the base query SET @sql = CONCAT('SELECT p.id , p.name , p.description, ', @sql, ' FROM product p LEFT JOIN product_additional AS pa ON p.id = pa.id GROUP BY p.id, p.name, p.description'); -- Prepare the query PREPARE stmt FROM @sql; -- Execute the prepared query EXECUTE stmt; -- Deallocate the prepared statement DEALLOCATE PREPARE stmt;
Dieser Code generiert eine dynamische Abfragezeichenfolge basierend auf den eindeutigen Feldnamenwerten in der Tabelle „product_additional“. Die Zeichenfolge wird dann verwendet, um eine PREPARE-Anweisung zu erstellen, die ausgeführt und dann freigegeben wird.
Beachten Sie, dass die Funktion GROUP_CONCAT eine Zeichenbeschränkung von 1024 Zeichen hat. Sie können diesen Grenzwert erhöhen, indem Sie den Parameter group_concat_max_len festlegen.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine dynamische MySQL-Pivot-Tabellenabfrage mithilfe vorbereiteter Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!