双mysql_fetch_array(从另一个表获取信息以获取数据)/ nest

时间:2014-10-20 13:20:38

标签: php mysql

我试着搜索这个问题,但他们的错误是另一回事。我出于某种原因使用PHP 5.2。

我要做的是,从一个表中获取mysql_fetch_array,然后使用该表的一列从另一个表中获取一行。

这是我的代码(对可怕格式的高级道歉)

$sql = mysql_query("SELECT * FROM testimonies WHERE visibility != 'Hide' ORDER BY date_submitted DESC");
$testimonyCount = mysql_num_rows($sql); // count the output amount
if ($testimonyCount > 0) {

//get data 'testimonies' table
while($info = mysql_fetch_array($sql)){ 
$username = $info['username'];

//Get id (in admin table) where username = username (in testimonies table)
$userid = mysql_query("SELECT * FROM admin WHERE username = $username LIMIT 1");
while($user = mysql_fetch_array($userid)){ $id = $user['id'];}

         $testimonies .= "<div class='row'><div class='col-lg-2'><center>
<img src='Pictures/Profile_Pictures/".$userid['id'].".jpg' width='160' height='160'>
<br>".$info['username']."</center></div><div class='col-lg-2'><center>
<img src='back/inventory_images/34.jpg' width='160' height='160'><br>"
.$info['product_used']."</center></div><div class='col-lg-8'><center><u>(Date: "
.$info['date_submitted']." - Ordered from our branch in <strong>"
.$info['branch_ordered']."</strong>, City)</u></center>".$info['testimony']."
</div></div><br>";
}
} 
else {
$testimonies = "No one has submitted their testimonies yet.";
}

所以你看,我的表“证词”有一个'用户名'列,所以是“admin”表。 我正在尝试做的是获取用户名所在的用户名(在管理员表中) 与“证词”表中的相同。我使用了第14行第2个表中的信息来获取图像src。

不幸的是它给了我这个错误:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/_____/public_html/Testimonies.php on line xx
Notice: Undefined variable: id in /home/_____/public_html/Testimonies.php on line xx

我搜索过的其他内容在第一个循环中得到了他们的数据,但我什么都没得到。第二个循环肯定是个问题。帮助

感谢。

1 个答案:

答案 0 :(得分:1)

首先,我要提到以一种可以循环的方式构建查询是一个非常糟糕的主意。与您的每个testimonies一样,您正在执行另一个查询以获取admin信息。因此,对于10个证词,你要敲10次MySQL [原始查询的+1]。您通常希望进入,获取数据并离开。

所以处理这个的更好方法是让MySQL为你做这件事,加入:

SELECT * FROM testimonies inner join admin on testimonies.username = admin.username WHERE visibility != 'Hide' ORDER BY date_submitted DESC

上述内容只会返回您与相应管理员的证词。如果你想要回复证词,即使他们没有管理员你也想要一个外部联接。您将inner join admin替换为left outer join admin

所以删除你的第二个while循环并试试。

此外,不推荐使用mysql_函数。因此您不应使用它们开发新代码。尝试让我的更改按原样运行,但您应该考虑查看PDO [Why shouldn't I use mysql_* functions in PHP?]。