-1

好的,伙计们。我有一个带有 id、categoryname 的表类别。

类别有:id=1 categoryname = 电池,id=2 categoryname = 闪光灯,id=3 categoryname 眼镜。

第二个表是用户。用户有 id、user_eimal、my_choices。每个用户都将想要出现的类别名称存储到 my_choices 中。

因此,例如 user_email xxxxx@xxx.com 的用户 George 已存储在 my_choices:battery,glasses

现在我想从表产品中调出记录,其中 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>'; 
}

?>
4

4 回答 4

5

您想使用连接表,这样您就可以建立多对多关系。您当前的结构更适合每个只有一个选择的用户。

你想要的是三个表:

  • 用户(用户 ID、用户名、用户电子邮件)
  • 类别(categoryID、category_name)
  • Users_Categories (userID, categoryID)

因此,要使用您的示例,您的三个表将如下所示(如果有人知道在这里演示 SQL 表的更好方法,请告诉我):

用户

  • 用户 ID:1 | 用户名:乔治 | 用户电子邮件:george@example.com

类别

  • 类别ID:1 | 类别名称:电池
  • 类别ID:2 | category_name=闪烁
  • 类别ID:3 | 类别名称眼镜。

用户_类别

  • 用户 ID:1 | 类别ID:1
  • 用户 ID:1 | 类别ID:3

然后,您将使用带有join子句的 select 语句来获取 George 和他的类别:

SELECT 
    user_name,
    category_name
FROM
    Users
    LEFT JOIN Users_Categories USING (userID)
    LEFT JOIN Categories USING (categoryID)
WHERE
    userID = 1

这将在结果中返回两行:

  1. 乔治,电池
  2. 乔治,眼镜

根据您要对该数据执行的操作,最好同时选择用户 ID。

如果您想要一个只返回包含所有信息的一行的查询,它会变得有点棘手。您必须使用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

对于关于产品的最后一个问题,您将遵循相同的逻辑并加入更多连接。您的 Products 表需要一个 productID、product_name 和 categoryID。

于 2012-11-03T21:22:12.833 回答
0
$trt = mysql_query ("select * from products where categoryname = 'batteries' OR categoryname = 'glasses'");
于 2012-11-03T21:19:14.963 回答
0

在您的情况下,使用 select 语句,

select * from products where categoryname in ( 'batteries','glasses');

IE,

//add quotes to category names (if ids you dont neeed these 2 lines)
$cats=explode(',',$my_choices);
$strcats = "'" . join("', '", $cats) . "'"; 

$trt = mysql_query ("select * from products where categoryname in ($strcats));

我的建议是使用类别 ID 而不是类别名称。

于 2012-11-03T21:20:58.880 回答
0

使用爆炸功能

$array = explode(','$my_choices);

现在 array[0] 和 array[1] 有 2 个值。然后使用

$result = mysql_query ("select * from products where categoryname = '".$array[0]."' OR categoryname = '".$array[1]."'");
于 2012-11-03T21:24:34.533 回答