これはマルチパートの質問です。私のデータベースは次のようになります。
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, show this else show that という if ステートメントがあります。最良の方法?
2 番目の問題は、ログイン時に情報を表示したいときに発生します。ベンダーがログインすると、ベンダー 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 つのサンプル レコードがあります。$num
との値$num1
が両方とも 4 であり、4 回$num
ループしているため、4 だけを表示するのではなく、16 を表示します。$num1
- この問題を解決して 4 つのレコードだけを表示するにはどうすればよいですか?
ご協力ありがとうございました。いずれかの部分で説明が必要な場合はお知らせください。