php显示表;第一列有mysql列注释,第二列有转置行结果

时间:2013-08-21 21:09:33

标签: php mysql arrays loops information-schema

为可能很差的标题道歉 - 最好是直观地展示我的目标:

当用户访问SomeURL.com/test.php?id=101

时,我想在页面上显示这样的内容
| Questions      | Answers       |
----------------------------------
| 1(a) First Name| Pedro         |
----------------------------------
| 1(b) Surname   | Millers       |
----------------------------------
| 2(a) Weight    | 150lbs        |
----------------------------------

这将通过查询mysql数据库来实现。首先:

SELECT * FROM Questionnaire WHERE idQuestionnaire=101;

返回:

| idQuestionnaire | FirstName    | Surname    | Weight    |
-----------------------------------------------------------
| 101             | Pedro        | Millers    | 150lbs    |

在我的表格设置中,我设置了列注释。即对于列“FirstName”,注释为“1(a)名字”。要检索所有这些评论,我可以再做一个查询:

SELECT COLUMN_NAMES FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Questionnaire';

返回:

| COLUMN_COMMENTS |
-------------------
| 1(a) First Name |
-------------------
| 1(b) Surname    |
-------------------
| 2(a) Weight     |
-------------------

我想用数组/循环而不是硬代码自动化代码的原因是因为我使用的实际表有超过400个字段,字段可能被修改或添加,所以我不想不断改变php代码以及发生这种情况时。这似乎是一项非常简单的任务,但在我的生活中找不到相关的文档化解决方案。

3 个答案:

答案 0 :(得分:0)

我建议您在结果集上使用mysqli fetch_fields()函数,以获取有关结果集中包含的列的信息,而不是在INFORMATION_SCHEMA中查询视图。

fetch_fields()适用于仅引用表中列的子集的查询,或返回表达式的查询,或从多个表中返回列的查询。

http://php.net/manual/en/mysqli.quickstart.metadata.php

答案 1 :(得分:0)

试试这个:

(SELECT 
 "1(a) First Name" as Questions,
 Firstname as Answers
FROM Questionnaire WHERE idQuestionnaire=101)
 union
(SELECT 
 "1(b) Surname" as Questions,
  Surname as Answers
FROM Questionnaire WHERE idQuestionnaire=101)
 union
(SELECT 
 "2(a) Weight" as Questions,
 Weight as Answers
FROM Questionnaire WHERE idQuestionnaire=101);

答案 2 :(得分:0)

最后,解决方案。 Spencer7593让我上路,但最终的代码如下:

$con=mysqli_connect("localhost","user","password","test");
if (mysqli_connect_errno($con)) {echo "MySQL conn. err:".mysqli_connect_error();}

 $sql = "SELECT column_comment,column_name FROM information_schema.columns  
  WHERE table_name = 'mytablename';";
 $query = mysqli_query($con,$sql) or die(mysql_error());
 $columnArray = array();

 while(($result = mysqli_fetch_array($query, MYSQL_ASSOC))){

 if($result['column_comment'])
  {
  $CurCol = $result['column_comment'];
  }
 else
  {
  $CurCol = "No text stored";
  } 

    $CurName = $result['column_name'];

    $columnArray[$CurName]=$CurCol;

 }

 //echo $columnArray['FirstName']; //test example to return "1(a) First Name"

所以我通过fetch_fields循环获取相应的列注释,然后循环遍历answers查询的结果,以显示下一个表列中的每个答案。