Php 如何合并所有两个SELECT语句?

Php 如何合并所有两个SELECT语句?,php,mysql,Php,Mysql,我有两张桌子,一张看起来像这样: select table1.`last name`,table1.`first name`, table2.`hobby` from table1 inner join table2 on table1.hobby_id = table2.id while ($return = mysql_fetch_assoc($select)) { echo $return['first name']." ".$return['last name']." li

我有两张桌子,一张看起来像这样:

select table1.`last name`,table1.`first name`, table2.`hobby`  from table1
inner join table2 on table1.hobby_id = table2.id
while ($return = mysql_fetch_assoc($select)) {

    echo $return['first name']." ".$return['last name']." likes ".$return['hobby']."<br/>\n";

}
表一

id | Last Name | First Name | Username | Password | Secret Question
id | Last Name | First Name | Username | Password | Secret Question

 1 | Hughes | Bobby | Bob | 123 | Maiden name?
还有一个是这样的:

select table1.`last name`,table1.`first name`, table2.`hobby`  from table1
inner join table2 on table1.hobby_id = table2.id
while ($return = mysql_fetch_assoc($select)) {

    echo $return['first name']." ".$return['last name']." likes ".$return['hobby']."<br/>\n";

}
表二

id | Hobby | Country | 
id | Hobby | Country | 

 1 | Baseball | USA
我想组合一个Select语句,从两个表中获取数据并输出结果。以下代码:

$select = mysql_query("

    SELECT * FROM table_one WHERE Username = 'Bob'

    UNION ALL

    SELECT * FROM table_two WHERE Hobby = 'Baseball'

");

while ($return = mysql_fetch_assoc($select)) {

$userName = $return['Username'];

$hobby = $return['Hobby'];

}

echo "$userName likes $hobby";
结果在使用的SELECT语句中有不同的列数错误,我做错了什么

编辑:

运行此命令会出现以下错误:警告:第16行的/home/studentw/public\u html/foo.php中提供的参数不是有效的mysql结果资源

表中的值为:

表一

id | Last Name | First Name | Username | Password | Secret Question
id | Last Name | First Name | Username | Password | Secret Question

 1 | Hughes | Bobby | Bob | 123 | Maiden name?
表二

id | Hobby | Country | 
id | Hobby | Country | 

 1 | Baseball | USA
我想你想要的是一个工会,而不是一个工会

SELECT FROM TABLE_ONE t1
  INNER JOIN TABLE_TWO t2
    ON t1.id = t2.id
WHERE t1.Username = 'Bob'
  AND t2.Hobby = 'Baseball'
联合要求每个表的数据列的数量和类型相同,并且基本上提供了来自不同表的多行的串联。另一方面,连接实际上是通过将另一个表的列直接连接到一个表,从而将一个表扩展为一个更宽的表,其中包含更多的列

在执行联接时,需要指定一个表的行如何对应于另一个表;在本例中,我假设您的Id字段应该是链接表的主键/外键。道歉,如果这是不正确的-如果是这样的话,我需要更多的信息,以便正确地帮助你

根据您编辑的问题:

我将首先将您链接到。它有一个必选参数和一个可选参数;第二个参数是连接句柄。如果您没有指定它,那么PHP假定最后打开的连接就是您想要使用的连接。所以我的第一个问题是,您是否正确调用了mysql_connect,并且该调用是否成功

如果您确定mysql\u connect调用有效,那么我不确定问题出在哪里。不过,我认为将mysql\u connect的结果分配给一个变量,这样就可以在mysql\u查询中显式指定连接,这不会有什么坏处。可能是以下情况:

$conn = mysql_connect("localhost:3306", "username", "password");
$query = "select * from some_table"; // obviously use your own query here
$result = mysql_query($query, $conn);

如果不起作用,请告诉我。

是的,Platinum Azure是正确的,您需要的是加入。但是,您的表格设计需要一些帮助

您需要将这些表相互关联起来。做到这一点的简单方法是:

1在表1中添加一列:id 2然后表1中的每个记录都需要在字段id中具有表2中的id

表1:

id | Last Name | First Name | Username | Password | Secret Question | hobby_id
1 | Hughes | Bobby | Bob | 123 | Maiden name? | 2
2 | Smith | Mike | Msmith | mypass | usual | 1
表2:

id | Hobby | Country | 
1 | Baseball | USA
2 | Hockey | Canada
3 | Horse Racing | Japan
请参见表2中的id与id的关系?那么,表1,鲍比打曲棍球,迈克打棒球。没有人能和赛马比赛

因此,要查询这些表,如下所示:

select table1.`last name`,table1.`first name`, table2.`hobby`  from table1
inner join table2 on table1.hobby_id = table2.id
while ($return = mysql_fetch_assoc($select)) {

    echo $return['first name']." ".$return['last name']." likes ".$return['hobby']."<br/>\n";

}
结果将是:

Hughes | Bobby | Hockey
Smith | Mike | Baseball
您的php代码如下所示:

select table1.`last name`,table1.`first name`, table2.`hobby`  from table1
inner join table2 on table1.hobby_id = table2.id
while ($return = mysql_fetch_assoc($select)) {

    echo $return['first name']." ".$return['last name']." likes ".$return['hobby']."<br/>\n";

}

请参阅我的编辑,我尝试运行您发布的代码,但它给出了另一个错误。对不起,我是mysql的新手。至于id,是的,两个表上的id列都是主键,并且是两个表之间的相关链接。请注意,您不希望主键指示两个表之间的关系。你应该在其中一张桌子上放一个外键。苍蝇特警说的没错——如果你对一个人有不止一个爱好,你的设计就会失败。我也讨厌使用ID作为主键。这一点都没有帮助,也不清楚您是否养成了为主键所在的表命名ID,然后对任何外来表使用相同名称的习惯。这将使维护变得更加简单,因为关系更加清晰。@HLGEM:一般来说,我同意,但我只是想让原作者的代码与我认为的设计配合。-1:将外键放在引用爱好表的用户表中允许用户和爱好之间存在一对多的关系。您的设计将此关系限制为一对一关系。我不知道你是怎么想的,但我不仅仅把StackOverflow作为我唯一的爱好。:-。。。虽然我想我也有点不舒服。实际上应该使用多对多联接表。也没有理由说一个爱好应该只属于一个用户。但我认为你仍然不愿意要求一对一的关系。可能是重复的