PHP页面中显示的重复数据

时间:2011-07-24 17:50:06

标签: php

我正在使用PHP开展项目。我有一个php页面,在网页中显示两行单行。而数据库表中没有重复数据。 Plz帮帮我!!!!! 这是两个表和PHP代码...

maincat_desktop
--------------------
maincat_id  maincat_nm
    1       Desktop
    2       Leptop
**subcat_desktop**
--------------------
subcat_id   maincat_id    subcat_nm1    subcat_disc subcat_amt  subcat_prod_img subcat_nm
        1   1             Acer123           ABCEDFG 25000       NULL            Acer
        2   1             Dell123           ABCEDFG 8000        NULL            Dell
        3   1             ompaq123          ABCEDFG 12000       NULL            Compaq
        4   1             Lenovo123         ABCEDFG 32000       NULL            Lenovo
        5   1             HP123             ABCEDFG 18000       NULL            HP
        6   1             Toshiba123        ABCEDFG 45000       NULL            Toshiba
<html>
<?php

    $query = mysql_query("select c.maincat_nm,c.maincat_id,s.subcat_nm1,s.subcat_disc,s.subcat_id,s.subcat_amt,s.subcat_prod_img from maincat_desktop c, subcat_desktop s where s.subcat_nm like '%Acer%'");

        while ($row = mysql_fetch_array($query))
        {
            if(mysql_affected_rows()<0)
            {
                echo "No data found";
            }
            else
            {
                echo "<table border=0 width=80% style='border-bottom:1px solid grey' align=center>";
                echo "<tr height='80px'>";
                echo "<td rowspan=20 width='80px'><img src='admin/upload/".$row['subcat_prod_img']."' width='70' heigth='70' style='vertical-align:middle'>";
                echo "</td>";
                echo "<td>";

                echo "<a href='acer_desktop_discription.php?subcat_id=$row[subcat_id]' style=color:blue><b>".$row['subcat_nm1']."</b></a>";
                echo "</td>";
                echo "</tr>";
                echo "</table>";
            }
        }

            echo "<br>";

?> </html>

4 个答案:

答案 0 :(得分:3)

修改选择

select c.maincat_nm,c.maincat_id,s.subcat_nm1,s.subcat_disc,s.subcat_id,s.subcat_amt,s.subcat_prod_img from maincat_desktop c, subcat_desktop s where c.maincat_id=s.maincat_id and s.subcat_nm like '%Acer%'

一点解释:当你从table1中选择table2时,它就像table1内连接table2 所以你必须提到一个附加条款

答案 1 :(得分:2)

值得注意的问题:

a)您的查询不正确。您正在进行连接操作(从多个表中进行选择),但未指定如何关联表。因此MySQL正在进行笛卡尔联接,它会产生所有可能的结果,然后您可以使用'like'子句进行一些小的过滤。你应该:

SELECT 
  c.maincat_nm, c.maincat_id, s.subcat_nm1, s.subcat_disc, s.subcat_id, s.subcat_amt, s.subcat_prod_img
FROM
  maincat_desktop c, subcat_desktop s
WHERE
  (c.maincat_id = s.parent_cat_id) AND (s.subcat_nm like '%Acer%');
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- the join clause

如果您有10个maincats和50个子类,则笛卡尔连接将生成500个候选行,然后将其缩减为subcat_nm包含'Acer'的行 - 在您的情况下,这是两行。通过指定显式连接子句,可以强制MySQL仅考虑实际存在主/子关系的主要猫/子猫。

b)在尝试获取之前,您必须检查是否有任何结果行:

$results = mysql_query(...) or die(mysql_error());

if (mysql_num_rows($results) == 0) {
   echo "No results";
} else {
   while($row = mysql_fetch_assoc($results)) {
      ...
   }
}

此外,mysql_affected_rows()用于插入/更新查询。 mysql_num_rows()用于选择查询,并告诉您可以提取多少行。这将始终为0或更多 - MySQL查询结果将从不返回负数行。它是0(没有行),正数( 1行或更多行)或布尔FALSE错误发生 )。

答案 2 :(得分:1)

有几件事是错的,但最重要的是你选错了。您正在从maincat_desktop中选择多个“列”,但选择所有行(因此,该表没有where - 子句)并且您subcat_desktop中选择一个(这个是有限的)。由于您的maincat_desktop表中有两行,因此您可以获得两次结果。您应该使用 Greenisha 查询(或 Marc B 以更好地了解笛卡尔联接)。

此外,您使用的mysql_affected_rows()不在此处工作,您可以说mysql_num_rows()。更重要的是 mysql_num_rows()错误的地方。如果没有结果,则无法进入while循环,并且您将收到错误(没有显示任何内容),表示您没有数据,您需要执行以下操作:

if(mysql_num_rows() > 0)
{
    while(...)
    { /* normal code */ }
}
else
{
    // No results;
}

如果你修复了这些错误,你应该留下一个只显示一行的工作代码。

答案 3 :(得分:0)

mysql_affected_rows()用于插入/更新操作。使用mysql_num_rows()。另外,当没有结果时,这将是= 0而不是&lt; 0.你应该在进入循环之前做if。所以先检查mysql_num_rows(),然后再进行获取。在执行查询后,检查结果是否为FALSE(如果是这种情况,请检查mysql_error()以获取错误)。