PHP回显多个列名称&值

时间:2015-03-21 17:25:40

标签: php mysql

我有一个数据库表,可以从我的朋友那里收集网址。作为用户,您可以创建“文件夹或类别(即列)”,然后将链接放在那里。

例如,如果您想创建一个名为“GAMES”的列并在其中添加www.ign.com链接,则可以。这样你就可以组织起来。

当向用户显示内容时,我希望能够显示列名和所有列值。

我一直在使用它(有点):

$callDbData = "SELECT * FROM $users_table ";
$callDbDataDoIt = mysqli_query($c2d, $callDbData) or die ("could not pull data" . mysqli_error($c2d));


while($row = mysqli_fetch_assoc($callDbDataDoIt)){ 
    foreach ($row as $fieldName => $value) { 
        echo "the field name is: <strong>" . $fieldName . "</strong> and the value is: " .$value.'<br />';
    }  
}

但问题是,由于列名是动态的(由用户按照他们认为合适的方式创建),我无法选择它并直接放置HTML / CSS,这就是为什么我像我一样制作我的SELECT语句上面做了:$callDbData = "SELECT * FROM $users_table ";

此外,每个用户都有自己的列数。

* ---------编辑---------- *

基于以上所述,并且由于表列名称都是动态的,我不能通过名称调用它们来组织它们。我需要一种通用的方法来调用每个列及其值。基本上打印它们一列&amp;一次所有的价值观。

作为一个例子,目前我在db上有一个名为“userTBL”的表。该表对于新注册的用户是唯一的。在其中我有3列(也是动态创建的),称为


-unsorted links
-magazines
-news

db上的每一列都包含URLS,例如:

示例一: //这就是数据库中的值如何

-UNSORTED LINKS (column name)
url1 (value)
url2 (value)
url3 (value)

-MAGAZINES(column name)
url1 (value)
url2 (value)
url3 (value)
url4 (value)
url5 (value)
url6 (value)

-GAMES(column name)
url1 (value)
url2 (value)

所以上面显示的是它在前端加载时应该是什么样的,因为基本上,这将填充一个垂直菜单。我需要它转到第1列,打印列名称及其所有值。然后转到第2列等......

使用我目前要显示结果的代码(显示在“编辑”行上方),它出现如下:

示例二

-UNSORTED LINKS (column name)
url1 (value)

-MAGAZINES (column name)
url1 (value)

-GAMES (column name)
url1 (value)


-UNSORTED LINKS (column name)
url2 (value)

-MAGAZINES (column name)
url2 (value)

-GAMES (column name)
url2 (value)


-UNSORTED LINKS (column name)
url3 (value)

-MAGAZINES (column name)
url3 (value)

-GAMES (column name)
  url3 (value)

我是如何实现如例一样的结果? 谢谢提前获取任何帮助。

3 个答案:

答案 0 :(得分:1)

这是一个经典的突破性报道:

$prevname = null;
while ($row = fetch()) {
    if ($name != $prevname) {
        echo "$name";
        $prevname = $name;
    }
    echo "$link";
}

修改

好的,正如我从评论和编辑问题中理解的那样,您希望更改排序,遍历列中的行而不是行内的列。尝试这样的事情:

$a = array();
while ($row = fetch_assoc())
    $a[] = $row;
// now we have the whole set in memory in an array
$flds = array_keys($a[0]); // this gives the list of field names in array $flds
foreach ($flds as $f) { // loop through FIELDS in your OUTER loop
    echo "FIELD: $f<br />\n";
    foreach ($a as $row) // loop through ROWS in your INNER loop
        echo "DETAIL: $row[$f]<br />\n";
}

答案 1 :(得分:0)

使用SQL可能有一种更简单的方法来处理它。 (我通常发现使用SQL来管理数据和使用PHP来处理输出和接口要容易得多)

由于您已经有了一个可以正常工作的用户表,但是您可以通过创建一个名为链接的表来管理它,并将外键链接到用户。在此表上,您可以创建名为column_name或类似名称的键(或列标题)。当用户创建添加链接时,他们可以创建新的列名,也可以选择他们使用选择菜单创建的现有名称。

输出数据会更容易。你可以有一个类似这样的查询(用户有一个id:

$query = "select u.id, l.column_name, l.link
    from user u, link l
    where u.id = l.id
    and u.id = $user"

然后会生成类似这样的内容(就像之前一样)

GAMES link 1
GAMES link 2
GAMES link 3

NEWS link 1
NEWS link 2
NEWS link 3

但是,由于每个项都被命名为不同的键,您可以在PHP中生成输出并以不同的方式调用不同的行。

    while($row = mysqli_fetch_assoc($query)){ 
         echo '<h3>' .$row['column_name'] . '</h3>';
        foreach ($row['link] => $link) { 
            echo $link.'<br />';
        }  
    }

(注意我没有测试过这个,但基本的想法应该有用)。

答案 2 :(得分:0)

通常,您可以通过保存回显的最后一个列名来跳过重复输出来实现此目的:

$lastFieldName = '';
while($row = mysqli_fetch_assoc($callDbDataDoIt)){ 
    foreach ($row as $fieldName => $value) {
        if ($fieldName != $lastFieldName) {
            echo "<strong>" . $fieldName . "</strong><br />";
            $lastFieldName = $fieldName;
        }
        echo '<a href="'.$value.'">'.$value.'</a><br />';
    }  
}