MySQL Select *返回除id列之外的所有内容

时间:2012-03-10 22:42:00

标签: mysql

我有一个包含2个表的数据库我希望从两个表中提取数据并将其显示在html表中。当我执行下面的select语句时,我似乎得到了除auto_increment列“id”

之外的所有内容
>mysql connection strings here.

$query = "SELECT Hotels.*,surfcup_Rates.*
          FROM Hotels 
               LEFT JOIN surfcup_Rates
               ON Hotels.id=surfcup_Rates.hotelID";

然后我使用加载查询到$ result。 稍后我将它加载到mysql_fetch_array并将其循环到一个html表中。

while ($row = mysql_fetch_array($result)) {
    echo "</td><td>";
    echo '<a href="DeleteHotelRecord.php?id="['.$row['id'].']">Delete</a>';
    echo "</td><td>";
    echo $row['id'];
    echo "</td><td>";
    echo $row['preferred'];
>and so on...........

一切正常:连接,select语句和数据加载到表中 完美。除第一个表中的id列以外的所有列。我希望使用id来允许用户删除记录。用户将从受密码保护的“后端”向表中添加数据以进行数据输入。

我的select语句有问题吗?或者我错过了什么。任何帮助将不胜感激。 谢谢, 戴夫。

3 个答案:

答案 0 :(得分:1)

尝试

$query = "SELECT *
FROM Hotels  
LEFT JOIN surfcup_Rates 
ON Hotels.id=surfcup_Rates.hotelID"; 

注意:我可能会在选择

中执行所有字段
SELECT Hotels.id as HotelId, surfcup_Rates.id as SurfCupId,....
 [others here] ... FROM Hotels  
    LEFT JOIN surfcup_Rates 
    ON Hotels.id=surfcup_Rates.hotelID

答案 1 :(得分:1)

假设您的surfcup_Rates表格中有id列(您没有明确说明,但似乎很可能),那么您需要“重命名”其中一个id来自两个表的列,这样当mysql_fetch_array找出每行返回的内容时它们不会发生冲突,或者我相信你可以只交换SELECT输出选择器的两个部分,因为你似乎并不关心id表中的surfcup_Rates

$query = "SELECT surfcup_Rates.*,Hotels.*
FROM Hotels 
LEFT JOIN surfcup_Rates
ON Hotels.id=surfcup_Rates.hotelID";

在这种情况下,来自id的{​​{1}}会屏蔽Hotels中的surfcup_Rates,而不是相反。{/ p>

答案 2 :(得分:0)

surfcup_Rates表是否还有一个名为id的字段?如果是这样,mySQL将不知道要使用idhotelsurfcup_Rates

在这种情况下,您有几个选项,

  1. 更改表格结构,但由于其他事情可能会中断,这样做会自行承担风险
  2. 使用别名(最佳方法)
  3. <强>声明

    我自己从未在PHP中使用过以下方法,我在SAP和Zimbra中看过它,因为这不是关于这些方面的讨论论坛,而不是辩论,我认为我会放弃一个免责声明它可能不会工作但如上所述和我在下面的评论中看到它的工作

    1. 致电hotels.id
    2. 我希望这会有所帮助