根据2个表中的MYSQL结果显示特定的img。 SELECT,PHP

时间:2011-05-07 16:40:42

标签: php mysql select rating

我正在尝试根据存储在2个MYSQL表中的内容创建用户评级系统。

一个表称为“图像标记”,另一个表称为“标记”。

我想检查“authorid”行,这两个表中的行相同,它根据用户的“authorid”存储一个数字。

我希望根据表格“markers”和“imagemarkers”中“authorid”中找到特定用户ID号的次数来显示特定图像。

这是在页面顶部声明:

  $theID = $_GET['id'];

我到目前为止的代码是:

   <? $img0 = "<img src='../webimages/0star.png'>"; 
  $img1 = "<img src='../webimages/1star.png'>"; 
  $img2 = "<img src='../webimages/2star.png'>";
  $img3 = "<img src='../webimages/3star.png'>";
  $img4 = "<img src='../webimages/4star.png'>";
  $img5 = "<img src='../webimages/5star.png'>"; ?>

  <? $result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = $theID");
$rows = mysql_num_rows($result3);  ?>

 <?php 
while($row = mysql_fetch_array($result3)){

 if ($result3 > 1) {
     echo "$img1";
 } elseif ($result3 == 5) {
     echo "$img2";
 } elseif ($result3 == 10) {
     echo "$img3";
 } elseif ($result3 == 20) {
     echo "$img4";
 } elseif ($result3 == 30) {
     echo "$img5";
 } else {
     echo "$img0";
 }
 ?>

 <? } ?>

我的mysql表行“authorid”存储为INT,11,并允许null勾选。

我得到的错误是:

   Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource....

请帮我解决这个问题。 非常感谢你的时间。

更新,这是我的新代码,当它显示'$ img3'时​​,它仍然显示'$ img0':

 <? $img0 = "<img src='../webimages/0star.png'>"; 
$img1 = "<img src='../webimages/1star.png'>"; 
$img2 = "<img src='../webimages/2star.png'>";
$img3 = "<img src='../webimages/3star.png'>";
$img4 = "<img src='../webimages/4star.png'>";
$img5 = "<img src='../webimages/5star.png'>";   ?>

 <? $row[0] = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".    (int)$theID."'");

  if ($row[0] > 1) {
      echo "$img1";
  } elseif ($row[0] > 5) {
      echo "$img2";
  } elseif ($row[0] > 10) {
      echo "$img3";
  } elseif ($row[0] > 20) {
      echo "$img4";
  } elseif ($row[0] > 30) {
      echo "$img5";
  } else {
      echo "$img0";
  }
  ?>

我正在计算特定用户编号显示的位置,并匹配'authorid'行中的'theID',来自两个表的imagemarkers'和'markers'。用户正在将其他数据存储在数据库中,并且通过存储,这将根据他们填写的形式填写“标记”和“图像标记”中的“authorid”行来存储信息。

我希望这可以帮助你理解我想要做的事情。

3 个答案:

答案 0 :(得分:0)

$theID周围添加单引号,同时确保$ theID在整数前面检查为整数或位置(int):

$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'");

如果错误仍然发生,请替换为此,并查看您获得的错误:

$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid = '".(int)$theID."'") or die(mysql_error());

因为$result3不是mysql_num_rows的有效结果资源

答案 1 :(得分:0)

 <? 
$result3 = mysql_query("SELECT * FROM `markers`, `imagemarkers` WHERE authorid=".(int)$theID.")";
$rows = mysql_num_rows($result3);  
?>

答案 2 :(得分:0)

首先,如果两个表中都存在'authorid'行,则应在查询中指定,您指的是哪一个:

$theID = intval($_GET['id']); // to avoid SQL-injections
$result3 = mysql_query("SELECT * FROM `markers` m, `imagemarkers` im WHERE m.authorid = $theID AND im.authorid = $theID");
// m and im are just table-aliases for brevity, you can use whatever names you like

其次,在“while”循环中将$ result3替换为$ row [0]:

if ($row[0] > 1) { ...

最后,逻辑有问题。

你能解释一下完整的数据库结构,除了authorid之外还有哪些列?