簡體   English   中英

如何對所有兩個SELECT語句進行UNION?

[英]How to UNION ALL two SELECT statements?

我有2張桌子,一張看起來像這樣:

表一

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

另一個看起來像這樣:

表二

id | Hobby | Country | 

我想組合一個從兩個表中獲取數據並輸出結果的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語句具有不同的列數錯誤,我在做什么錯呢?


編輯:

運行此命令將產生以下錯誤: 警告:mysql_fetch_assoc():提供的參數不是第16行/home/studentw/public_html/foo.php中的有效MySQL結果資源。

$select = mysql_query("

SELECT FROM TABLE_ONE t1
  INNER JOIN TABLE_TWO t2
    ON t1.id = t2.id
WHERE t1.Username = 'Bob'
  AND t2.Hobby = 'Baseball'

");

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

    $firstName = $return['Username'];
    $hobby = $return['Hobby'];

}

echo "$firstName likes $hobby";

表中的值是:

表一

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

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

表二

id | Hobby | Country | 

 1 | Baseball | USA

我想您想要一個JOIN ,而不是UNION或UNION ALL。

SELECT FROM TABLE_ONE t1
  INNER JOIN TABLE_TWO t2
    ON t1.id = t2.id
WHERE t1.Username = 'Bob'
  AND t2.Hobby = 'Baseball'

並集要求每個表的數據列必須具有相同的編號和類型,並且基本上為您提供了來自不同表的多個行的串聯。 另一方面,通過從字面上將另一表的列連接到表,聯接實際上將一個表擴展為具有更多列的更寬的表。

進行聯接時,需要指定一個表中的行與另一個表中的行對應的方式。 在這種情況下,我假設您的Id字段應該是將表鏈接在一起的主鍵/外鍵。 抱歉,如果不正確,那么請您提供更多信息,以幫助您。


根據您編輯的問題:

我首先將您鏈接到mysql_query函數文檔 它有一個必選參數和一個可選參數。 第二個參數是您的連接句柄。 如果未指定,則PHP會假定您要使用的最后一個使用mysql_connect打開的mysql_connect 所以我的第一個問題是,您是否正確調用了mysql_connect ,並且該調用成功完成了嗎?

如果您確定mysql_connect調用有效,那么我不確定是什么問題。 不過,我認為將mysql_connect的結果分配給一個變量不會有什么壞處,因此您可以在mysql_query顯式指定連接。 可能類似於以下內容:

$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中添加一列:“ hobby_id” 2)然后,表1中的每個記錄記錄都必須在“ hobby_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中的hobby_id與ID如何關聯? 因此,表1中,鮑比(Bobby)踢曲棍球,麥克(Mike)踢棒球。 沒有人能匹敵賽馬。

所以要查詢這些表,它看起來像這樣:

select table1.`last name`,table1.`first name`, table2.`hobby`  from table1
inner join table2 on table1.hobby_id = table2.id

結果將是:

Hughes | Bobby | Hockey
Smith | Mike | Baseball

然后您的php代碼如下所示:

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

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM