如何使用 php 从 MySQL table 中不同列中的相同值中获取一个?
How to Get one from same value in different column in MySQL table using php?
我的 page_views
table
里有这个
id cookie_id item_id content
======================================
1 123456 product_1 some
2 123456 product_2 some
3 654321 product_1 some
4 654321 product_2 some
5 654321 product_3 some
6 444444 product_5 some
7 222222 product_7 some
8 222222 product_2 some
9 333333 product_2 some
我想让客户也查看框,我的变量中只有当前页面的 product_id。现在一个新用户到达 product_2 his/her cookie_id 333333
不,我想在客户还查看了 Lebel 时显示 him/her 个产品包装盒。在这种情况下,应获取并显示 id = 1 & 5 & 7(无重复项)的项目。
$fetch_data = $conn->query("SELECT item_id FROM page_veiws WHERE item_id IN (SELECT item_id FROM page_veiws GROUP BY item_id HAVING COUNT(cookie_id) > 1)");
但是没用。 (当然我确实理解 foreach
循环来显示获取的框),我只是想让查询获取它。
我怎样才能实现这些目标?
请帮帮我?
SELECT
same_cookie.item_id,
MIN(same_cookie.id) AS id
FROM
page_views AS same_product
INNER JOIN
page_views AS same_cookie
ON same_cookie.cookie_id = same_product.cookie_id
AND same_cookie.item_id != 'Product_2'
WHERE
same_product.item_id = 'Product_2'
AND same_product.cookie_id != 333333
GROUP BY
same_cookie.item_id
where 子句将 same_product
过滤为除了当前 cookie 之外的所有也查看过产品 2 的行(避免显示当前用户之前查看过的其他项目)。
然后,获取那些 cookie 查看过的所有产品,除了产品 2(避免显示已经被查看过的产品)。
GROUP BY 每个产品一行(避免重复)。 MIN(id) 以获得查看该产品的第一个页面视图。
Returns...
| Product_1 | 1 |
| Product_3 | 5 |
| Product_7 | 7 |
如果您不需要产品列,请删除 SELECT 子句的第一行,但将其保留在 GROUP BY 中。
工作示例:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=daa47642433bee1cbb978b929934a088
我的 page_views
table
id cookie_id item_id content
======================================
1 123456 product_1 some
2 123456 product_2 some
3 654321 product_1 some
4 654321 product_2 some
5 654321 product_3 some
6 444444 product_5 some
7 222222 product_7 some
8 222222 product_2 some
9 333333 product_2 some
我想让客户也查看框,我的变量中只有当前页面的 product_id。现在一个新用户到达 product_2 his/her cookie_id 333333 不,我想在客户还查看了 Lebel 时显示 him/her 个产品包装盒。在这种情况下,应获取并显示 id = 1 & 5 & 7(无重复项)的项目。
$fetch_data = $conn->query("SELECT item_id FROM page_veiws WHERE item_id IN (SELECT item_id FROM page_veiws GROUP BY item_id HAVING COUNT(cookie_id) > 1)");
但是没用。 (当然我确实理解 foreach
循环来显示获取的框),我只是想让查询获取它。
我怎样才能实现这些目标?
请帮帮我?
SELECT
same_cookie.item_id,
MIN(same_cookie.id) AS id
FROM
page_views AS same_product
INNER JOIN
page_views AS same_cookie
ON same_cookie.cookie_id = same_product.cookie_id
AND same_cookie.item_id != 'Product_2'
WHERE
same_product.item_id = 'Product_2'
AND same_product.cookie_id != 333333
GROUP BY
same_cookie.item_id
where 子句将 same_product
过滤为除了当前 cookie 之外的所有也查看过产品 2 的行(避免显示当前用户之前查看过的其他项目)。
然后,获取那些 cookie 查看过的所有产品,除了产品 2(避免显示已经被查看过的产品)。
GROUP BY 每个产品一行(避免重复)。 MIN(id) 以获得查看该产品的第一个页面视图。
Returns...
| Product_1 | 1 |
| Product_3 | 5 |
| Product_7 | 7 |
如果您不需要产品列,请删除 SELECT 子句的第一行,但将其保留在 GROUP BY 中。
工作示例:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=daa47642433bee1cbb978b929934a088