<?php
// Connessione al database WooCommerce
$servername = "localhost";
$username = "fabio";
$password = "aaa";
$dbname = "ed_imp";
$conn = new mysqli($servername, $username, $password, $dbname);
// Verifica della connessione
if ($conn->connect_error) {
die("Connessione fallita: " . $conn->connect_error);
}
function rimuoviAccenti($stringa) {
$mappatura = array(
'à' => 'a', 'è' => 'e', 'ì' => 'i', 'ò' => 'o', 'ù' => 'u',
'À' => 'A', 'È' => 'E', 'Ì' => 'I', 'Ò' => 'O', 'Ù' => 'U',
'á' => 'a', 'é' => 'e', 'í' => 'i', 'ó' => 'o', 'ú' => 'u',
'Á' => 'A', 'É' => 'E', 'Í' => 'I', 'Ó' => 'O', 'Ú' => 'U',
// Aggiungi altre mappature se necessario
);
return strtr($stringa, $mappatura);
}
// Normalizza i nomi delle colonne per risolvere i duplicati
function normalizzaNomeColonna($nome) {
$nome = str_replace([' ', '-'], '_', $nome);
$nome = rimuoviAccenti($nome);
// Rinomina le colonne duplicate
switch ($nome) {
case 'numero_pagine':
return 'numero_pagine2';
case 'isbn':
return 'isbn2';
case 'sottotitolo':
return 'sottotitolo2';
case 'tag':
return 'tag2';
case 'codice_prodotto':
return 'codice_prodotto2';
case 'ricerca_ebook':
return 'ricerca_ebook2';
default:
return $nome;
}
}
// Modifica della prima query per includere sku_woocommerce_magento e MAGENTO_ID
$sql = "SELECT
p.ID as id_prodotto,
p.post_title as nome_prodotto,
p.post_name as slug_prodotto,
pm.meta_value as attributi_serializzati,
sku_meta.meta_value as sku_woocommerce_magento,
cpe.entity_id as MAGENTO_ID
FROM
ed2024_posts p
JOIN
ed2024_postmeta pm ON p.ID = pm.post_id
LEFT JOIN
ed2024_postmeta sku_meta ON p.ID = sku_meta.post_id AND sku_meta.meta_key = '_sku'
LEFT JOIN
catalog_product_entity cpe ON sku_meta.meta_value = cpe.sku
WHERE
p.post_type = 'product' AND pm.meta_key = '_product_attributes'";
$result = $conn->query($sql);
// Inizializza un array per tenere traccia di tutti i nomi degli attributi
$attributi_header = array('id_prodotto', 'nome_prodotto', 'slug_prodotto', 'MAGENTO_ID');
$attributi_rows = array();
// Elabora i risultati della prima query e costruisci l'array degli attributi
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$attributi = unserialize($row['attributi_serializzati']);
$attributi_row = array(
'id_prodotto' => $row['id_prodotto'],
'nome_prodotto' => $row['nome_prodotto'],
'slug_prodotto' => $row['slug_prodotto'],
'MAGENTO_ID' => $row['MAGENTO_ID'] ?? ''
);
foreach ($attributi as $nome_attributo => $dettagli_attributo) {
$nome_attributo = normalizzaNomeColonna($nome_attributo);
if (!in_array($nome_attributo, $attributi_header)) {
$attributi_header[] = $nome_attributo;
}
$attributi_row[$nome_attributo] = $dettagli_attributo['value'] ?? $dettagli_attributo['name'] ?? '';
}
$attributi_rows[$row['id_prodotto']] = $attributi_row;
}
} else {
echo "Nessun risultato trovato per la prima query";
}
// Seconda query per ottenere informazioni aggiuntive
$sql2 = "SELECT
t.name AS attribute_name,
tt.taxonomy AS attribute_taxonomy,
tr.object_id AS product_id,
p.post_title AS product_name,
p.post_name as slug_prodotto
FROM
ed2024_terms t
JOIN
ed2024_term_taxonomy tt ON t.term_id = tt.term_id
JOIN
ed2024_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN
ed2024_posts p ON tr.object_id = p.ID
WHERE
p.post_type = 'product'
ORDER BY
p.ID, tt.taxonomy;";
$result2 = $conn->query($sql2);
// Elabora i risultati della seconda query
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$product_id = $row2['product_id'];
$attribute_taxonomy = $row2['attribute_taxonomy'];
$attribute_name = $row2['attribute_name'];
// Aggiungi il nuovo header se non esiste
if (!in_array($attribute_taxonomy, $attributi_header)) {
$attributi_header[] = $attribute_taxonomy;
}
// Assicurati che l'array per questo prodotto esista
if (!isset($attributi_rows[$product_id])) {
$attributi_rows[$product_id] = array(
'id_prodotto' => $product_id,
'nome_prodotto' => $row2['product_name'],
'slug_prodotto' => $row2['slug_prodotto']
);
}
// Aggiorna l'array dei dati del prodotto
$attributi_rows[$product_id][$attribute_taxonomy] = $attribute_name;
}
} else {
echo "Nessun risultato trovato per la seconda query";
}
// Creazione del file CSV
$csvFileName = 'export-semi-pro-magento-id.csv';
$csvFile = fopen($csvFileName, 'w');
// Scrivi l'intestazione nel file CSV
fputcsv($csvFile, $attributi_header);
// Scrivi i valori degli attributi nel file CSV
foreach ($attributi_rows as $product_id => $attributi_row) {
$csvRow = array();
foreach ($attributi_header as $header) {
$csvRow[] = $attributi_row[$header] ?? '';
}
fputcsv($csvFile, $csvRow);
}
// Chiudi la connessione al database e il file CSV
$conn->close();
fclose($csvFile);
echo "File CSV creato con successo: " . $csvFileName;
/*
// Prepara la query di inserimento
$columns = implode(', ', array_map(function($col) { return '`' . $col . '`'; }, $attributi_header));
$placeholders = implode(', ', array_fill(0, count($attributi_header), '?'));
$insertQuery = "INSERT INTO export_table ($columns) VALUES ($placeholders)";
$stmt = $conn->prepare($insertQuery);
if (!$stmt) {
die("Errore nella preparazione della query: " . $conn->error);
}
// Divide $attributi_rows in lotti da 50 record
$lotti = array_chunk($attributi_rows, 50);
foreach ($lotti as $lotto) {
foreach ($lotto as $attributi_row) {
// Converti tutti i valori dell'array in stringa
$values = array_map('strval', array_values($attributi_row));
// Crea un array di tipi (tutti 's' per stringa)
$types = str_repeat('s', count($values));
// Lega i parametri alla query
$stmt->bind_param($types, ...$values);
// Esegui la query
if (!$stmt->execute()) {
echo "Errore durante l'inserimento dei dati: " . $stmt->error;
}
}
}
echo "Inserimento dei dati nella tabella riuscito con successo.";
// Chiudi lo statement e la connessione al database
//$stmt->close();
*/
//$conn->close();
?>