【问题标题】:Add new columns into a existing TABLE using the values from a select query as the name of the new columns使用选择查询中的值作为新列的名称将新列添加到现有 TABLE
【发布时间】:2017-05-29 14:23:23
【问题描述】:

我想使用表中现有列的值作为创建到另一个现有表中的列的名称。同时将从另一个表中获得的值插入到新创建的列中。 我有以下内容: 表:“feature_description”包含 4 列。 feature_id feature_language 功能名称 feature_admin_name 2 2 拉克托塞弗雷:拉克托塞弗雷 …… 在 feature-admin_name 下有 8 个值。我想将 8 个新列添加到以这 8 个值命名的现有表“产品”中。 到目前为止,我有以下代码。

<?php
if ($conn = mysqli_connect("127.0.0.1", "root", "xxxxxxx", "fk16"))
{   
$feature_index = "SELECT * 
                  FROM feature_set_values AS fsv  
             LEFT JOIN feature_value_description AS fvd ON fsv.feature_value_id = fvd.feature_value_id   
             LEFT JOIN feature_value AS fv ON fv.feature_value_id = fvd.feature_value_id    
             LEFT JOIN feature_description AS fd ON fd.feature_id = fv.feature_id    
             LEFT JOIN feature_set_to_products AS fstp ON fstp.feature_set_id = fsv.feature_set_id";
if ($filter_query = mysqli_query($conn, $feature_index))
{       
  while ($filter_name = mysqli_fetch_array($filter_query))
    {
        //$feature_name = array();
        $feature_name = $filter_name["feature_admin_name"];
        //$feature_value = array();
        $feature_value = $filter_name["feature_value_text"];
        for ($i = 0; $i < count($filter_name['feature_admin_name']); $i++){
        echo $filter_name['feature_admin_name'][$i]."\n<br />";
        mysqli_query($conn, "ALTER TABLE products ADD (".$filter_name['feature_admin_name'][$i]." VARCHAR(50))");
        }           
    }
    //echo "</table>";
}   
mysqli_close($conn);
}
else {
echo "My Fehler";
}
?>

但我得到的只是添加到以 8 个值的首字母命名的表“产品”中的 4 列! 8 个值是:Laktosefei、Glutenfrei、Gentechnikfrei、BIO、Herkunft、Milchsorte、Labart、Milchbehandlung。 但我得到 4 列的名称:L、G、H、M。 我究竟做错了什么? Kann 请有人在这件事上帮助我。 谢谢你。 当使用“var_dump”时, 然后我得到“回声”结果: Result of "var_dump" by "echo"

【问题讨论】:

  • var_dump($filter_name["feature_admin_name"]) 并将输出添加到问题中。
  • 当我更改代码时:$feature_name = var_dump($filter_name["feature_admin_name"] 每个“回声”我得到以下内容:字符串(11)“Laktosefei”字符串(10)“Glutenfrei”字符串(14)“Gentechnikfrei”字符串(8 )“Herkunft”字符串(10)“Milchsorte”字符串(6)“Labart”字符串(15)“Milchbehandlung”。但是没有新的列被添加到表 products 中。
  • 首先,您通常不会将var_dump 放入一个变量然后echo 它。我不确定这是否可能。您只需var_dump 变量即可查看里面的内容。关于您的问题,echo $filter_name['feature_admin_name'][$i]."\n&lt;br /&gt;"; 行是完整输出单词还是仅输出单词的第一个字母?
  • 感谢您的提示。 echo $filter_name['feature_admin_name'][$i] . "\n&lt;br /&gt;"; 行只给出单词的第一个字母。
  • mysqli_query($conn, "ALTER TABLE products ADD (" . $filter_name['feature_admin-name'][$i] . " VARCHAR(50))"); 行在表格产品中创建了 5 个新列。首先,这些列仅将第一个字母作为其名称。此外,它只创建名称的每个开头字母一次。这意味着对于像“Laktosefei”和“Labart”这样的值,我只是一个名为“L”的列。

标签: mysql phpmyadmin


【解决方案1】:

首先,特别感谢 Kishor,他通过var_dump() 给了我正确的提示。 我现在已经解决了如下问题:

<?php
if ($conn = mysqli_connect("127.0.0.1", "root", "xxxxxx", "fk16"))
{
  $feature_name = array();
  $feature_index = "SELECT * 
                  FROM feature_set_values AS fsv  
             LEFT JOIN feature_value_description AS fvd ON fsv.feature_value_id = fvd.feature_value_id   
             LEFT JOIN feature_value AS fv ON fv.feature_value_id = fvd.feature_value_id    
             LEFT JOIN feature_description AS fd ON fd.feature_id = fv.feature_id    
             LEFT JOIN feature_set_to_products AS fstp ON fstp.feature_set_id = fsv.feature_set_id
               LEFT JOIN products AS p ON p.products_id = fstp.products_id";
if ($filter_query = mysqli_query($conn, $feature_index))
{
  while ($filter_name = mysqli_fetch_array($filter_query))
  {
    $feature_name = array('id' => $filter_name["feature_id"], 'name' => $filter_name['feature_admin_name']);
        foreach ($feature_name as $id => $name)
        {
          mysqli_query($conn, "ALTER TABLE products ADD (".$name." VARCHAR(20))");
        }
  }
  mysqli_close($conn);
}
?>

现在,我从表 feature_description.feature_admin_name 中得到了 8 个必要的值 作为根据需要添加到表products 中的8 个新列的名称。 再次感谢您在此问题上的帮助和提示。

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2018-05-05
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多