这是一个包含多个部分的问题。我的数据库看起来是这样的:带外键表的PHP嵌套循环
USERS
-id
-fname
-lname
COMPANIES
-id
-name
-type
PRODUCTS
-id
-product
-restaurant (foreign key to companies id)
-vendor (foreign key to companies id)
-user (foreign key to users id)
-transaction_date
- 这是一个很好的方式来建立数据库?我正在考虑为餐厅和供应商提供单独的表格,但希望他们使用相同的登录页面,而不必担心UNION查询,我只是按类型选择它们。他们在登录时看到不同的信息,所以我有一个if语句,表示如果type = r,则显示这个else表明。最好的办法?
当我想在登录时显示信息时出现第二个问题。说一个供应商登录,他们将看到一个与其供应商ID匹配的所有记录的列表。但是,由于嵌套循环,我看到的记录太多。例如,表看起来像这样:
Date--Product--Restaurant--User
我使用此查询:
$sql = mysql_query("SELECT products.*, companies.name, CONCAT_WS(' ', users.fname, users.lname) AS fullname FROM products INNER JOIN companies ON products.vendor = companies.id INNER JOIN users ON products.user = users.id WHERE company='$id' AND companies.type='$type'") or die(mysql_error());
$num=mysql_num_rows($sql);
$sql1 = mysql_query("SELECT products.restaurant, companies.name AS cname FROM products INNER JOIN companies ON products.restaurant = companies.id") or die(mysql_error());
$num1=mysql_num_rows($sql1);
$i = 0;
while ($i < $num) {
$j = 0;
while ($j < $num) {
$d = mysql_result($sql,$i,"transaction_date");
$p = mysql_result($sql,$i,"product");
$r = mysql_result($sql1,$j,"cname");
$u = mysql_result($sql,$i,"fullname");
<td><?php echo $d; ?></td>
<td><?php echo $p; ?></td>
<td><?php echo $r; ?></td>
<td><?php echo $u; ?></td>
$j++; }
$i++; }
$id
和$type
是在登录会话创建的值。目前有4个示例记录在表格中。而不是仅显示4,它显示16,因为$num
和$num1
的值均为4,并且$num
正在循环$num1
四次。
- 我该如何解决这个问题,只显示4条记录?
谢谢你的帮助。如果您需要对任何部分进行澄清,请告知我们。
确实每个产品都有且只有一个用户?如果是的话,你的模式看起来很好如果不是,您需要制作一个包含product_id,user_id和交易日期的product_users表。 – sgroves
是的每个产品只有一个用户。实际上,我应该将产品表重命名为交易,因为基本上只有一种产品。 – robk27