[英]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.