使用php和mySQL从两个表中选择*

时间:2016-03-26 06:21:08

标签: php mysql

我有两个表,一个是项目,另一个是用户。

PROJECTS table
ID     |     USER_ID    |   NAME
-------------------------------------
80     |        1       |   ABC Co.
82     |        2       |   XYZ Inc.

USERS table
ID     |     FIRSTNAME  |   LASTNAME
-------------------------------------
1      |     Joe        |   Namath
2      |     Jimmy      |   Fallon

我想要的是编写一个查询,例如:

SELECT * FROM PROJECTS, USERS WHERE PROJECTS.USER_ID=USERS.ID AND FIRSTNAME = "Joe"

我可以在php中成功运行查询,但是当我尝试访问结果时,我得不到我想要的。我理解为什么,但我无法找到纠正它的方法。例如:

$row = mysqli_fetch_query($awesomeDatabaseLink);
echo $row['ID];  //returns '1' and I really wanted '80'

我明白了。这两个表具有相同名称的字段,但它们的数据不同。 MySQL会根据我的模糊要求返回最佳猜测。但是,我也尝试过:

echo $row['PROJECTS.ID']; //returns an empty string.

我应该提一下,我迫切需要两张表中的“*”。 Projects表有几十个字段(不是我的设计,重新设计数据库超出范围)。 Users表格也非常广泛,因此单独列出每个字段比查看我的示例表格更加不切实际。

有什么建议吗? SH

4 个答案:

答案 0 :(得分:3)

最快的解决方法是为表达式指定唯一的列别名(在本例中只是一个简单的列引用)。

执行此操作时,您需要使用表名或别名限定*。如果要从两个表中返回所有列,则需要为每个表包含*

此外,抛弃旧式逗号运算符以进行连接操作,并改为使用JOIN关键字。并限定所有列引用。例如:

SELECT PROJECTS.*
     , USERS.*
     , PROJECTS.ID AS MY_PROJECTS_ID
  FROM PROJECTS
  JOIN USERS
    ON USERS.ID=PROJECTS.USER_ID
   AND USERS.FIRSTNAME = "Joe"

分配的别名MY_PROJECTS_ID将是结果集中列的名称,因此您可以通过指定的别名引用该列。

这假设没有返回名称为MY_PROJECTS_ID的其他列。

如果结果集中有两个(或更多)列具有相同的名称,则只能获得其中一个按名称引用它的列。

答案 1 :(得分:2)

我建议你使用别名。这会使事情变得不那么模糊。

试试这个:

SELECT 
PROJECTS.ID AS project_id, 
USER_ID, 
NAME, 
USERS.ID AS user_id, 
FIRSTNAME, 
LASTNAME 
FROM PROJECTS, USERS 
WHERE PROJECTS.USER_ID=USERS.ID AND FIRSTNAME = "Joe"

然后:

echo $row['project_id']; //returns Project id

希望这有帮助。

答案 2 :(得分:1)

当您从多个表中选择内容时,您应始终限定名称(提供完整路径,如table.column)。如果两个表共享列名,那么您需要为它们指定不同的名称。

SELECT u.ID AS UserId,
       u.FIRSTNAME AS FirstName,
       u.LASTNAME AS LastName,
       p.ID AS ProjectId,
       p.NAME AS ProjectName
FROM   USERS AS u
JOIN   PROJECTS AS p ON p.USER_ID = u.ID
WHERE  u.FIRSTNAME = "Joe"

如果你想获得每一列,但是他们的一些名字会发生冲突,那么你可以重命名那些冲突的名称,如下所示:

SELECT *,
       u.ID as USERID,
       p.ID as PROJECTID
FROM   USERS AS u
JOIN   PROJECTS AS p ON p.USER_ID = u.ID
WHERE  u.FIRSTNAME = "Joe"

答案 3 :(得分:0)

希望这会对你有所帮助。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Using single SQL</title>
<style>
table,td,th
{
 padding:10px;
 border-collapse:collapse;
 font-family:Georgia, "Times New Roman", Times, serif;
 border:solid #ddd 2px;
}
</style>
</head>
<body>
<table align="center" border="1" width="100%">
<tr>
<th>product id</th>
<th>product name</th>
<th>category name</th>
</tr>
<?php
mysql_connect("localhost","root");
mysql_select_db("dbtuts");
$res=mysql_query("SELECT c.* , p.* FROM tbl_categories c,tbl_products p WHERE c.cat_id=p.cat_id");
while($row=mysql_fetch_array($res))
{
 ?>
    <tr>
    <td><p><?php echo $row['product_id']; ?></p></td>
    <td><p><?php echo $row['product_name']; ?></p></td>
    <td><p><?php echo $row['cat_name']; ?></p></td>
    </tr>
    <?php
}
?>
</table>
</body>
</html>

关注此[link](http://www.codingcage.com/2014/12/fetch-data-from-multiple-tables-in-php.html)!