无法正确转换SELECT结果

  • 本文关键字:SELECT 结果 转换 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[核心公司id],它只会是数字。我希望"company"表中的相应公司(核心公司id=正确的company.company-name/company.id)位于其位置。

我不知道该怎么做。我能以某种方式调整我原来的SELECT查询/结果吗?我需要一个额外的查询吗?或者我可以以某种方式修改php输出来解决这个问题吗?

编辑:我应该补充一点,核心公司名称将与我在初始SELECT中检索的$Company名称不同。该公司是产品公司的名称,但"核心"的制造商在大多数时候都是不同的公司例如,如果核心公司id是20,我希望任何一个公司名称中有一个公司id为20的公司都放在中

谢谢你的帮助。

第2版:请耐心等待我添加表格数据等。很抱歉没有很好地解释,我发现很难用语言表达

编辑3:更多信息。

我有两张桌子:

表"产品"包含:id,主要公司id,型号名称,颜色,核心公司id

表'公司包含:id,公司名称

我的输出当前如下:

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)

很难正确发布输出示例。啊。我做得不太好,是吗?

这应该有效:

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
}
}

UPDATE:我刚刚注意到,在SELECT和ORDER中,您正在调用表"product"(单数),但在FROM和JOIN中,您有"products"(复数)-这可以解释为什么您没有得到预期的结果!

看起来你没有用你的选择检索到你想要的价值(核心公司id),或者可能在产品中,但我不清楚"核心公司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

您总是可以通过printr查看您的数组,并确保核心公司id存在;

print_r($group);  ## new line for testing here
foreach ($group as $company-name => $models) {

编辑:从阅读你的编辑中,听起来你可能想加入同一张表两次,你可以这样做,但我仍然不清楚核心公司id来自哪里。

也许你需要这样的东西:

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
...

然后,您可以在PHP代码中使用another_field,方法与使用field1相同。

如13.2.8所述。SELECT语法"SELECT_expr可以使用AS alias_name来指定别名。"您可以设置一个表达式,并将字段重命名为稍后使用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;

使用Subquery获取公司名称,并在PHP代码中以$model[company_name]的形式访问该名称。

更新

刚刚注意到,你把"产品"one_answers"产品S"搞砸了。

也许你的查询应该是这样的:

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]

最新更新