【问题标题】:List tables from MySQL DB and display table names as options in a drop down list列出 MySQL DB 中的表并将表名显示为下拉列表中的选项
【发布时间】:2014-01-15 19:58:31
【问题描述】:

我正在尝试编写一个包含 2 个下拉列表的页面。第一个从 mysql db 填充表列表,允许用户选择有问题的日期,第二个允许用户从该表中的列中选择一个名称。我目前有如下编写的表单,用于从用户指定的特定表/行生成一个值数组,然后我可以将其回显到 html 表单中的各个字段中。

我正在努力获取由表名填充的下拉列表。有人可以帮忙吗?很抱歉,这是我的第一篇文章,我想彻底。我知道与我的数据库的连接正在工作,当我在代码中指定要使用的表时,第二个下拉列表正在工作。

我需要第一个框来列出表名,然后设置变量 $date。

这是日期的下拉列表:

<select name='Date'>
<?php
    $date = $_POST['date'];
$cxn=mysqli_connect("localhost",$userid,$password,$db)
or die ("Could not connect to Database");

$result=mysqli_query($cxn,"Show tables from january");

while($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{
echo "<option value='".$row['Value']."'>".$row['Value']."</option>"; 
}

?>
</select>

这是上面所选表格中名称的下拉列表。

<select name='agentname'>
<?php
    $name = $_POST['agentname'];
$cxn=mysqli_connect("localhost",$userid,$password,$db)
or die ("Could not connect to Database");

$sql=mysqli_query($cxn,"SELECT Value FROM january.'$date'");

while($row = mysqli_fetch_assoc($sql)) 
{      
echo $value ="<option value='".$row['Value']."'>".$row['Value']."</option>"; 
}

?>
    </select>
     <input type='submit' value='Get Dashboard' />
</form>

创建表单:

<form action='getlist.php' method='post'>
 <div align="center">
   <p>
     <select name='Date'>
<?php
    $date = $_POST['date'];
$cxn=mysqli_connect("localhost",$userid,$password,$db)
or die ("Could not connect to Database");

$result=mysqli_query($cxn,"Show tables from january");

while($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{
echo "<option value='".$row['Value']."'>".$row['Value']."</option>"; 
}

?>
</select>

<select name='agentname'>
<?php
    $name = $_POST['agentname'];
$cxn=mysqli_connect("localhost",$userid,$password,$db)
or die ("Could not connect to Database");

$sql=mysqli_query($cxn,"SELECT Value FROM january.'$date'"); //I have specified schema's in my DB for the different months 

while($row = mysqli_fetch_assoc($sql)) 
{      
echo $value ="<option value='".$row['Value']."'>".$row['Value']."</option>"; 
}

?>
    </select>
     <input type='submit' value='Get Dashboard' />
</form>

用于以下查询以生成数组:

<?php
$cxn=mysqli_connect("localhost",$userid,$password,$db)
or die ("Could not connect to Database");

$result=mysqli_query($cxn,"SELECT column1, column2, column3 //just listing examples here for my columns there is about 45 columns for this selection
FROM january.'$date' 
WHERE Value='$name'");

while($row = mysqli_fetch_array($result))
{
        $stats = $row;
}

?>

【问题讨论】:

  • 你为每个月创建一个数据库,为每一天创建一个表?
  • 拥有一个示例数据库架构会很有帮助,因为您的结构似乎有些奇怪。
  • @digitalChris,是的,我有一个月份的模式和每天的表格。
  • @ethan,我之前没做过,你想怎么看?我基本上有一个一个月的模式,并且该模式中的表为该月的每一天提供数据,用于在行和列中指定数据是什么的人员列表。
  • 所以你为每个月创建一个数据库,为每一天创建一个表?....为什么????

标签: php mysql


【解决方案1】:

好吧……

为了解决您的实际问题,我认为问题在于您在 mysqli_fetch_assoc 的输出中引用的索引。通常,“SHOW”查询的表名的键控类似于“Tables_in_databasename”或类似的名称。你可以print_r 你的$row 变量来查看你应该引用什么索引。

现在,与您的问题无关,我必须坚持让您重新考虑如何存储数据。在数据库和表的名称中表示有意义的数据是非常糟糕的过程。这不仅不是数据库的本意使用方式,这将不可避免地给您带来问题,而且您也会让事情变得不必要地困难。

我不确定您要存储什么样的统计信息,但假设它类似于网站每天的点击次数。这些数据可以很容易地存储在一个数据库和一个表中。例如:

数据库:统计数据

表格:daily_statistics

列:id、stat_date、值

现在您可以轻松地将每天的点击次数存储在一张表中。

id, stat_date, value
1, 2014-01-01, 300
2, 2014-01-02, 400
etc...

假设您每天有多个值。没问题

id, stat_date, value
1, 2014-01-01, 300
2, 2014-01-02, 400
3, 2014-01-02, 250
etc...
// The unique ID, alows multiple records per day.
// If you need them categorized in a different way,
// add another column.

这种结构将持续多年。

id, stat_date, value
1, 2014-01-01, 300
2, 2014-01-02, 400
3, 2014-01-02, 250
4, 2015-01-01, 250
5, 2016-01-01, 250
etc...

现在您可以访问 mysql 聚合功能,您可以更轻松地导入和导出数据,随着时间的推移,您不必处理拥有 100 多个数据库甚至更多表的情况,并且任何追随你的开发者都不必费力地解决这种棘手的情况。

【讨论】:

  • 谢谢伊桑!所以你的建议是,在 1 db 的 1 表中将数据存储为日期,然后用当天的统计数据命名。然后我可以在数据库上运行我的查询并让用户输入日期,选择名称,然后使用这两个值来识别表中的正确行?
  • 所以我可以使用这个结构说我想查看一个日期范围的平均值 使用具有多个日期的相同查询并使用一些函数来平均这些值并将它们显示在数组中,是吗?
猜你喜欢
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多