好的伙计们.我有一个id,categoryname的表类别.
类别有:id = 1 categoryname =电池,id = 2 categoryname =闪烁,id = 3 categoryname眼镜.
第二个表是用户.用户有id,user_eimal,my_choices.每个用户都在my_choices中存储了想要显示的类别名称.
因此,例如用户George和user_email xxxxx@xxx.com存储在my_choices中:电池,眼镜
现在我想从表产品中调出记录,其中categoryname是用户george存储到my_choices中的值.
产品有id,p_title,categoryname
例如,我想:
<?php
$usenmail = $_SESSION['SESS_EMAYL_NAME'];
$q1 = "SELECT * FROM categories WHERE id = '$id'";
$q2 = mysql_query($q1, $connectiondb) or die(mysql_error());
$results = mysql_fetch_assoc($q2);
$my_choices = $results['my_choices']; //That means $my_choices = batteries,glasses
//Now i want to select fom my table poducts only the categories (batteries,glasses)that user has store.
$trt = mysql_query ("select * from products where categoryname = batteries,glasses");
while($apst = mysql_fetch_assoc($trt)) {
echo '<div style="color: #000; float: left;">Productname: '.$['apst'].'</div>';
echo '<br>';
}
?>
Run Code Online (Sandbox Code Playgroud)
您希望使用连接表,以便可以建立多对多关系.您当前的结构更适合每个只有一个选择的用户.
你想要的是三个表:
因此,要使用您的示例,您的三个表将如下所示(如果有人知道在这里演示SQL表的更好方法,请告诉我):
用户
分类
Users_Categories
然后,您将使用带有join子句的select语句来获取George及其类别:
SELECT
user_name,
category_name
FROM
Users
LEFT JOIN Users_Categories USING (userID)
LEFT JOIN Categories USING (categoryID)
WHERE
userID = 1
Run Code Online (Sandbox Code Playgroud)
这将返回结果中的两行:
根据您要对数据执行的操作,最好也选择userID.
如果您想要一个只返回包含所有信息的行的查询,则会变得有点棘手.您必须使用GROUP BY功能.这看起来像这样:
SELECT
user_name,
GROUP_CONCAT (category_name ',')
FROM
Users
LEFT JOIN Users_Categories USING (userID)
LEFT JOIN Categories USING (categoryID)
GROUP BY
userID
WHERE
userID = 1
Run Code Online (Sandbox Code Playgroud)
对于有关产品的最后一个问题,您可以使用更多连接遵循相同的逻辑.您的Products表希望拥有productID,product_name和categoryID.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |