不确定这应该是PHP还是MySQL。
我有这个问题:
SELECT
product.*,
company.company-name
FROM
products
INNER JOIN
company ON products.company-id=company.id
ORDER BY
company.company-name,
product.model
我使用它输出:
$group = array();
while ($row = mysqli_fetch_assoc($result)) {
$group[ $row['company-name'] ][] = $row;
}
foreach ($group as $company-name => $models) {
foreach ($models as $model) {
echo "Product Name: $model[model-name]";
echo "Color: $model[color]";
echo "Core Company: $model[core-company-id]"; // this is the line I am trying to fix
}
显然,在上面的输出中,如果输出$ model [core-company-id],它只会是数字。我希望来自'company'表(core-company-id =正确的company.company-name / company.id)的相应公司代替它。
我无法弄清楚该怎么做。我可以以某种方式调整我的原始SELECT查询/结果,我是否需要额外的查询,或者我可以修改php输出以某种方式解决此问题?
编辑:我应该补充一点,核心公司名称将与我在初始SELECT中检索的$ company-name不同。该公司是产品公司的名称,但“核心”的制造商大多数时候都是不同的公司 例如,如果core-company-id为20,我想要将company.company-name的20个company.id放在那里
感谢您的帮助。
编辑2:在我添加表格数据时请耐心等待。很抱歉没有解释这一点,我发现很难说出来。
编辑3:更多信息。
我有两张桌子:
表'产品'包含:id,main-company-id,model-name,color,core-company-id
表'公司包含:id,company-name
我的输出目前看起来像这样:
COMPANY NAME (comes from company.company-id)
Product 1 Name: Item name
Color: Blue
Core Company: 27 (comes from product.core-company-id)
Product 2 Name: Item 2 name
Color: Blue
Core Company: 35 (comes from product.core-company-id)
COMPANY NAME
Product 1 Name Item 1 Name
Color: Green
Core company: 27 (comes from product.core-company-id)
很难正确发布输出示例。啊。我不是那么好吗?
答案 0 :(得分:1)
这应该有效:
foreach ($group as $company-name => $models) {
foreach ($models as $model) {
echo "Product Name: $model[model-name]";
echo "Color: $model[color]";
echo "Core Company: " . $company-name; // this is the line
}
}
答案 1 :(得分:1)
更新:我刚刚在SELECT和ORDER中注意到您正在调用表格' product' (单数)但在FROM和JOIN中你有'产品' (复数) - 这可以解释为什么你没有得到你期望的结果!
看起来你并没有用你的选择检索你想要的价值(core-company-id),或者它可能在产品中检索,但它不清楚我在哪里&# 39;核心公司-ID'应该来自。 假设它是公司表中的一列,这应该有效:
SELECT
product.*,
company.company-name
company.core-company-id
FROM
products
INNER JOIN
company ON products.company-id=company.id
ORDER BY
company.company-name,
product.model
你总能看到你的数组与print_r有什么关系,并确保核心公司ID存在;
print_r($group); ## new line for testing here
foreach ($group as $company-name => $models) {
编辑:从阅读您的编辑开始,听起来好像您可能想要两次加入同一个表,您可以这样做,但我仍然不清楚核心公司ID来自哪里。< / p>
答案 2 :(得分:0)
也许你需要这样的东西:
SELECT
field1,
field2,
company.company-id AS com_company-id
company.company-name AS another_field
FROM table
...
product.company-id AS pro_company-id
...
然后,您可以像使用another_field
一样在PHP代码中使用field1
。
如13.2.8. SELECT Syntax所述“可以使用AS alias_name为select_expr提供别名。”您可以设置表达式并将该字段重命名为稍后可以使用PHP轻松访问的名称。例如$model[another_field]
,$model[com_company-id]
,$model[pro_company-id]
。
如果您在不同的表中具有相同的字段名称您可以使用AS
创建别名,并在您的SQL查询中使用它们(在JOIN
上等)
如果您需要获取一些company_names
而不是company_ids
您可以使用方括号()
来创建 SQL子查询。例如,获取公司名称而不是“27”,“35”等
然后应该有:
SELECT ... FROM ...
(
SELECT Company.company-name FROM Company
INNER JOIN Product
WHERE Company.id = Product.core-company-id
) AS company_name;
使用子查询获取公司名称,并在PHP代码中将其作为$model[company_name]
访问。
<强>更新强>
刚才注意到,你正在弄乱“产品”和“产品”。
也许您的查询应该是这样的:
SELECT
products.*, -- You have product.* here
company.company-name
FROM
products
INNER JOIN
company ON products.company-id=company.id
ORDER BY
company.company-name,
products.model -- You have product.model here
在这种情况下,也许,您可以像之前在PHP代码中那样选择$model[core-company-id]
。