我正在努力做我刚才说的话。我有两个联手表。它们由相同的id加入。但是有两列具有相同的名称,我只想输出其中一列。
$query= "SELECT *
FROM users
INNER JOIN bookings ON users.username = bookings.personal
JOIN products ON bookings.productid = products.productid
WHERE users.id = $id
";
$selectproductname = $db->prepare($selectuseremailquery);
$selectproductname ->execute(array());
foreach($selectproductname as $index => $rs) :
it gives me something like this table:
-id -----id----products----products------
- -
-1 1 a cup coffee cup -
-2 2 a pen a purple pen -
-----------------------------------------
我想输出咖啡杯,但有两列同名。我该如何输出?
这不起作用:
<td><div> <?php echo $rs['products.productname']; ?> </div> </td>
我必须用*。
选择所有内容答案 0 :(得分:2)
在生产软件中使用 SELECT products.id,
products.productname,
products.id AS product_id,
bookings.*,
etc., etc.
通常是considered harmful,特别是在php中,出于您询问的确切原因。
在php中,有时结果集会加载到关联数组中。这将导致来自每组重复列名称之外的所有数据的数据消失。
您想要使用
SELECT *
枚举结果集中所需的列。 (请注意,我猜你的列名。)
我知道你的问题说你必须使用SELECT *
。我怀疑这是真的。如果是这样的话,很可能是那些不知道他们在谈论什么的人强加的要求。 (愚蠢的教授诡计浮现在脑海中。)
如果必须使用<?php
if(Yii::$app->user->isGuest)
{
throw new CHttpException(404, 'Oops. Not logged in.');
}
?>
,则需要使用结果集元数据来检查每个列的元数据,并找出需要提取的列。 getColumnMeta()
这样做。