我有一个数据库表,可以从我的朋友那里收集网址。作为用户,您可以创建“文件夹或类别(即列)”,然后将链接放在那里。
例如,如果您想创建一个名为“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)
我是如何实现如例一样的结果? 谢谢提前获取任何帮助。
答案 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 />';
}
}