mysql - 如何在 PHP/MySQL 中通过外键获取所有值?
问题描述
我正在做一个电子商务项目。我这里有 3 张桌子sizes
,products
而且product_sizes
。
sizes
表如下:
uid | size
----------
1 | S
2 | M
3 | L
product_sizes
表如下:
product_uid | size_uid
----------------------
1 | 2
1 | 3
2 | 1
2 | 2
我想要做的是,product_uid
从表中检索所有尺寸,这是外键products
,这是我正在使用的代码,
$get_sizes = "SELECT * FROM product_sizes WHERE product_uid IN($pro_id)";
$run_sizes = mysqli_query($conn, $get_sizes);
while($row_sizes = mysqli_fetch_assoc($run_sizes)){
$sizes[] = $row_sizes['size_uid'];
$sizesAll = implode(", ", $sizes);
}
对于第一个产品,我正确获取了值,但对于第二个产品,它结合了数据。
例如,如果产品 1 有尺寸1,3
,而产品 2有尺寸,2,3
那么它会1,3,2,3
针对产品 2 显示。
任何帮助将不胜感激,谢谢!
解决方案
我会GROUP_CONCAT
在这里使用:
SELECT
ps.product_uid,
GROUP_CONCAT(s.size ORDER BY s.uid) sizes
FROM product_sizes ps
LEFT JOIN sizes s
ON s.uid = ps.size_uid
GROUP BY
ps.product_uid;
演示
请注意,我没有添加任何 PHP 代码,您的主要问题/问题似乎是围绕 SQL 本身解决的,而不是如何从 PHP 中使用 SQL。
推荐阅读
- serialization - Java对象序列化中嵌套对象原始值的java.lang.StackOverflowError异常
- firebase - 为什么在通过 Firebase 身份验证传递 id 令牌时,此 CORS 身份验证的 Google Cloud 函数会返回 403?
- bash - 在 Bash 中计算 txt 文件中不同单词的数量
- azure-active-directory - 从使用 MSAL 调用 acquireTokenSilent 返回的 accessToken 是否总是应该是 JWT?如果不是呢?
- angular - 需要 Angular 指令——文本框中的数字和/或两位小数
- python - 重新索引 Panda Multiindex
- google-bigquery - 函数 TIMESTAMP_DIFF 没有匹配的签名...... BigQuery 上的错误
- python - 返回自我的类型提示子类
- ios - 制作一个消息应用程序,但它不断重复一些帖子
- c - 根据 ftell 的说法,我的文本文件大小为 25 个字节。但是,当我使用 ftell 作为 char 数组的大小时,sizeof 给了我 200。什么给了?