无法正确转换SELECT结果

时间:2014-02-13 01:45:23

标签: php

不确定这应该是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)

很难正确发布输出示例。啊。我不是那么好吗?

3 个答案:

答案 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]

相关问题