首页 > 解决方案 > 使用循环或数组从表产品选项中提取所有值

问题描述

我有一个简单的市场。我有表产品和表 product_option

| id | codice_prodotto  | attributo_chiave  | valore_chiave |
| 1  | 001              | colore            | rosso         |
| 2  | 001              | taglia            | m             |
| 3  | 002              | taglia            | s             |

现在我想选择产品 001 的所有属性和值所以我在 php 中有我的查询

$query = "SELECT * from table WHERE codice_prodotto = '001'";

现在我想循环这个并提取键和值

colore = rosso
taglia = m

我怎样才能做到这一点?一个while循环不是正确的方法

while ($riga_risultato = $eseguo_query_prodotto->fetch_assoc()) {

//    print_r($riga_risultato);
echo $riga_risultato['attributo_chiave'];

}

输出是(右)

tagliacolore

但是我想在不同的变量中有这个产品的属性和值,所以如果我有更多的记录没有问题。你能帮助我吗?也许我必须从查询选择中转换数组?谢谢


嗨,也许这可能是一个解决方案或有其他简单的方法?

// query
$query_prodotto = "SELECT * from prodotto_opzioni WHERE codice_prodotto = '001'";
$eseguo_query_prodotto = $connessione->query($query_prodotto) or die ("errore query". $connessione->error);

//estraggo i valori
while ($riga_risultato = $eseguo_query_prodotto->fetch_assoc()) {

    // populate multidimensional array with all values I want
    $js_arr[] = [
        'attributo_chiave' => $riga_risultato['attributo_chiave'],
        'valore_chiave' => $riga_risultato['valore_chiave']
        
    ];
}

//extract array
foreach ($js_arr as $pette){
    echo  $pette['attributo_chiave'].'='.$pette['valore_chiave'].'<br>';

}

标签: phploops

解决方案


您的表基本上是一个非规范化的键值存储。这里的一种选择是使用带有聚合的数据透视查询来生成特定的键和值,例如

SELECT
    codice_prodotto,
    MAX(CASE WHEN attributo_chiave = 'colore' THEN valore_chiave END) AS colore,
    MAX(CASE WHEN attributo_chiave = 'taglia' THEN valore_chiave END) AS taglia,
    ...   -- other keys here
FROM yourTable
WHERE
    codice_prodotto = '001'
GROUP BY
    codice_prodotto;

推荐阅读