Table: SignUp Table: Thinker2014
+----------+------------+ +-----+------------+----------+
| User_Id | Product_No | | Id | Product_No | Pic_One |
+----------+------------+ +-----+------------+----------+
| 2 | HP74BK;HEW | | 1 | HP74BK;HEW | hew1.jpg |
+----------+------------+ +-----+------------+----------+
| 9 | LC41C;HEW | | 2 | HP74BC;HEW | hew1.jpg |
+----------+------------+ +-----+------------+----------+
| 13 | BC21M;HEW | | 3 | HP74M;HEW | hew1.jpg |
+----------+------------+ +-----+------------+----------+
| 24 | HP74Y;HEW | | 4 | HP74Y;HEW | hew1.jpg |
+----------+------------+ +-----+------------+----------+
客户将登录他们: 用户名:jason和密码:123
转到:inks-etc.com - >登录 - >提交以上信息 - >点击下一页
我想收到客户收到的4种“LIKE”产品。例如: 如果客户已收到HP74BK; HEW作为“添加到CART”的产品;我想要 将HP 74 Cyan,HP 74 Magenta和HP 74Yellow作为cusotmers添加 选择购买。
我在登录用户名时收到了客户UserId“2”。然后我用
在子查询中使用TABLE获取product_no:SignUp和IN
带有TABLE的Product_No:Thinker2014,它允许我需要的其他产品。
我已经尝试过INNER JOINING,但我很难完成
$ user_id
这是我需要帮助的续集: 查询具有产品图片所需的产品选择。 这两个表格:SignUp包含他们想要购买的客户产品和 Thinker2014存储他们想要购买的产品;而我正试图进入或进入 加入他们不仅可以获得他们需要的产品,还可以获得额外的“LIKE”产品 他们可能需要的一面,如墨盒的不同颜色(青色,mag,黄色)。
<?php
include "../../SearchEngine/dbc_site.php";
$user_id = $_SESSION['uid'];
$query = "SELECT `Thinker2014`.`Product_No`,`Thinker2014`.`miniImageFarm`
FROM `Thinker2014`
WHERE `Product_No` LIKE `SignUp`.`Product_No`
IN
(SELECT `Product_No`
FROM `SignUp`
WHERE $user_id)
LIMIT 4";
$result = mysqli_query($dbc,$query) or die(mysqli_error($dbc));
while($row = mysqli_fetch_array($result)) {
$miniImage = $row['miniImageFarm'];
$Product_No = $row['Product_No'];
?>
<tr>
<td>
<table>
<tr>
<td><img src="<?php echo $miniImage ?>" alt="" name="miniImage"
border="0"/></td>
<td><?php echo $Product_No ?></td>
</tr>
</table>
</td>
</tr>
<?php
} // End of SECOND while loop
?>
答案 0 :(得分:0)
如果我理解正确,那么您想要推荐其他颜色不同的产品(与某个user_id的product_no的前4个字符相匹配)。
所以以下查询的作用是从Thinker2014
中选择与该user_id的product_no
不同但是喜欢(前4个字符并以通配符%
结尾)的产品。该user_id的product_no
SELECT Product_No,miniImageFarm
FROM Thinker2014
WHERE Product_No != (SELECT Product_No FROM SignUp WHERE User_Id = $user_id)
AND Product_No LIKE (SELECT CONCAT(LEFT(Product_No,4),'%') FROM SignUp WHERE User_Id = $user_id)
LIMIT 4
请参阅此sqlFiddle
只要user_id
表中的每个signup
只有一个条目,这将有效。如果user_id
在signup
表中有多个条目,则您必须根据signup
表中的auto_incremented列通过某种排序来决定您想要的条目,如下所示(注意ORDER BY someIdColumn DESC LIMIT 1
)
SELECT Product_No,miniImageFarm
FROM Thinker2014
WHERE Product_No != (SELECT Product_No FROM SignUp WHERE User_Id = $user_id ORDER BY someIdColumn DESC LIMIT 1)
AND Product_No LIKE (SELECT CONCAT(LEFT(Product_No,4),'%') FROM SignUp WHERE User_Id = $user_id ORDER BY someIdColumn DESC LIMIT 1)
LIMIT 4
如果您想使用INNER JOIN作为解决方案,您可以使用LEFT(Product_No,4)
如下所示基于Product_No的前4个字符加入(如果有2个或更多条目,则此版本不会中断注册表中的某个user_id)
SELECT T.Product_No,T.miniImageFarm
FROM Thinker2014 T
INNER JOIN SignUp S ON LEFT(T.Product_No,4) = LEFT(S.Product_No,4)
WHERE T.Product_No != S.Product_No
AND S.User_Id = $user_id
LIMIT 4
请参阅此sqlFiddle
如果您在Thinker2014表中碰巧有多个行具有相同的product_no(和相同的颜色),并且您希望为同一产品HP74
返回4种不同的颜色,则可以使用下面的查询
SELECT T.Product_No,T.miniImageFarm,
@row := IF (@prevProductNo IS NULL OR @prevProductNo != T.Product_No,1,@row+1) as row,
@prevProductNo := T.Product_No
FROM Thinker2014 T
INNER JOIN SignUp S ON LEFT(T.Product_No,4) = LEFT(S.Product_No,4)
WHERE T.Product_No != S.Product_No
AND S.User_Id = $user_id
HAVING row = 1
ORDER BY T.Product_No
LIMIT 4;
见sqlFiddle
以上查询的作用是ORDER BY T.Product_No
,以便它扫描每个Product_No,以便所有相同的颜色都是正确的(例如,扫描3行青色,然后扫描8行洋红色,然后5行黄色产品HP74)
每当@row
变量看到一个新的Product_No值时(意味着当我们的@prevProductNo
IS为NULL时尚未设置为任何东西或者它看到一个新的Product_No)并且向上计数时,它将被设置为1 Cyan为2,3,Magenta为1,2,3,4,5,6,7,8,然后是黄色1,2,3,4,5,我们将每行称为{{1 }}。
row
意味着我们只需要行值为1的行,因此它将获取青色的第1行和洋红色的第1行以及第1行的黄色。如果有更多颜色,它将抓住每种颜色的第1行。那么查询将获取不同的颜色。并且LIMIT 4将返回最多4个条目(不同颜色)。
以下查询将匹配前4个字符,并以相同的字符结尾,例如HAVING row = 1
或;HEW
,具体取决于注册表中的Product_No。
;CPT