我有两个表,一个是项目,另一个是用户。
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
答案 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)!