访问while循环中的第二个表



原谅我这周刚学了php,所以我不确定我做得是否正确。

它首先访问数据库和标题的类别表;然后它获取这些信息并创建标题、定价和目录链接。

然后,在while循环中,在完成第一部分之后,它应该运行第二个while循环来访问products表,以列出category_id与categories表中的cat_id匹配的所有产品。

打印出来时应该是

页眉
定价PDF
商品尺寸图片
商品尺寸图片
商品尺寸图片
etc

页眉
定价PDF
商品尺寸图片
等等…

到目前为止,第一个while循环起作用,但第二个不起作用。有正确的方法传递变量吗?在第一个表的while循环中,我可以不访问第二个表吗?我不知道。。。我试过一些东西,但没有一个效果好

<?php
//connect to server
$con = mysql_connect('localhost','username','password');
//test connection
if (!$con)
{
    die ('Could not connect: ' . mysql_error());
}
//access primary DB 
mysql_select_db("main_db", $con);
//place table into variable
$categories = mysql_query("SELECT * FROM categories");

//begin table build
while($row = mysql_fetch_array($categories))
{
    //set shading variable
    $table_row = 0;
    //set current set   
    $cur_set = $row['cat_id'];
    //create document link and header
    echo "<a name='" . $row['cat_name'] . "'><h3>" . $row['cat_title'] . "</h3></a>";
    //create table and table formatting cell
    echo "<table id='productTable'><tr id='tableHead'>";
    //table width formattting here
    echo "<td style='width:165px;'></td>";
    echo "<td style='width:235px;'></td>";
    echo "<td style='width:155px;'>";
    //link and icons to category catalog
    echo "<a href='catalog/" . $row['cat_pdf'] . ".pdf'><img src='data/pdflogo.png' alt='pdf button' /></a>";
    //link and icons to category pricing sheet
    echo "<a href='catalog/" . $row['cat_pricing'] . ".pdf'><img src='data/pricinglogo.png' alt='pricing button' /></a>";
    //finish formatting
    echo "</td></tr>";
    //place table into variable
    $products = mysql_query("SELECT * FROM products WHERE category_id='" . $row['cat_id'] . "'");
    //begin table build
    while($table = mysql_fetch_array($products));
    {
        //create up row
        echo "<tr id='tr" . $table_row . "'>";
        //create first cell
        echo "<td>" . $table['prod_name'] . "</td>";
        //create second cell
        echo "<td>" . $table['prod_dim'] . "</td>";
        //create third cell
        echo "<td>";
        //create third cell, first image
        echo "<a href='catalog/" . $table['prod_img1'] . ".jpg'>" . "<img src='data/jpglogo.png' alt='image button' />" . "</a>";
        //create third cell, second image
        echo "<a href='catalog/" . $row2['prod_img2'] . ".jpg'>" . "<img src='data/jpglogo.png' alt='image button' />" . "</a>";
        //finish formatting
        echo "</td></tr>";
        //cycle row
        if ($table_row == 0)
            {
                    $table_row = 1;
            }
        else
            {
                $table_row = 0;
            }
    //end table
    echo "</table>";
    }
}
//close connection
mysql_close($con);
?>

提前感谢

在两个表上执行INNER JOIN会更精简

SELECT
    A.cat_id,A.cat_name,A.cat_title,A.cat_pdf,A.cat_pricing,
    B.prod_name,B.prod_img1,B.prod_img2
FROM categories A INNER JOIN products B ON A.cat_id = B.category_id;

您可以在A.cat_id 上迭代

这是我提出的建议(大括号可能会被禁用,但下面是cat_id上的迭代应该是什么样子)。请更改开始和停止标记的样式。

<?php
//connect to server
$con = mysql_connect('localhost','username','password');
//test connection
if (!$con)
{
    die ('Could not connect: ' . mysql_error());
}
//access primary DB 
mysql_select_db("main_db", $con);
//place table into variable
$categories = mysql_query("SELECT A.cat_id,A.cat_name,A.cat_title,A.cat_pdf,A.cat_pricing,B.prod_name,B.prod_img1,B.prod_img2 FROM categories A INNER JOIN products B ON A.cat_id = B.category_id");
$current_catid = -1;
//begin table build
while($row = mysql_fetch_array($categories))
{
        if ( $current_catid != $row['cat_id'] )
        {
            if ( $current_catid > -1 ) { echo "</table>"; }
            $current_catid != $row['cat_id']
    //set shading variable
    $table_row = 0;
    //set current set   
    $cur_set = $row['cat_id'];
    //create document link and header
    echo "<a name='" . $row['cat_name'] . "'><h3>" . $row['cat_title'] . "</h3></a>";
    //create table and table formatting cell
    echo "<table id='productTable'><tr id='tableHead'>";
    //table width formattting here
    echo "<td style='width:165px;'></td>";
    echo "<td style='width:235px;'></td>";
    echo "<td style='width:155px;'>";
    //link and icons to category catalog
    echo "<a href='catalog/" . $row['cat_pdf'] . ".pdf'><img src='data/pdflogo.png' alt='pdf button' /></a>";
    //link and icons to category pricing sheet
    echo "<a href='catalog/" . $row['cat_pricing'] . ".pdf'><img src='data/pricinglogo.png' alt='pricing button' /></a>";
    //finish formatting
    echo "</td></tr>";
        }
//create up row
    echo "<tr id='tr" . $table_row . "'>";
    //create first cell
    echo "<td>" . $table['prod_name'] . "</td>";
    //create second cell
    echo "<td>" . $table['prod_dim'] . "</td>";
    //create third cell
    echo "<td>";
    //create third cell, first image
    echo "<a href='catalog/" . $table['prod_img1'] . ".jpg'>" . "<img src='data/jpglogo.png' alt='image button' />" . "</a>";
    //create third cell, second image
    echo "<a href='catalog/" . $row2['prod_img2'] . ".jpg'>" . "<img src='data/jpglogo.png' alt='image button' />" . "</a>";
    //finish formatting
    echo "</td></tr>";
        //cycle row
    if ($table_row == 0)
    {
        $table_row = 1;
    }
    else
    {
        $table_row = 0;
    }
    //end table (Fix this, might produce extra table tag)
    echo "</table>";
}
//close connection
mysql_close($con);
?>

您正在加载相对数据,因此简短的回答是否定的,因为如果使用联接选择它们,可能会产生开销。

此外,尝试通过只选择您想要的而不是所有内容来限制*所产生的开销。

对于新的mysql(i)调用,也请遵循Truth的建议。一旦你掌握了sql和php,你就可以转移到其他类型的数据库调用(使用面向对象的代码或activerecord),但请先了解mysql调用是如何完成的。

相关内容

  • 没有找到相关文章

最新更新