Nasıl TÜM iki SELECT ifadeleri UNION'e?

2 Cevap php

Ben 2 tablolar var, biri bu gibi görünüyor:

TABLO ONE

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

ve başka bu gibi görünüyor:

TABLO İKİ

id | Hobby | Country | 

Ben tablolar ve çıkış sonuçları her iki veri kapmak bir Select deyimi birleştirmek istiyorum. Aşağıdaki kodu:

$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";

Bir The used SELECT statements have a different number of columns hata sonuçları, ben yanlış ne yapıyorum?


EDIT:

Bu Koşu aşağıdaki hatayı veriyor: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/studentw/public_html/foo.php on line 16

$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";

Tablolardaki değerler şunlardır:

TABLO ONE

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

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

TABLO İKİ

id | Hobby | Country | 

 1 | Baseball | USA

2 Cevap

Ben bir JOIN, bir sendika ya UNION ALL istiyorum düşünüyorum.

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

Sendikalar her tablonun veri sütunları aynı sayıda ve türde, ve temelde farklı tablolarda birden fazla satır bir birleştirme vermek gerektirir. , Diğer taraftan, aslında kelimenin tam anlamıyla ona başka bir tablonun sütunları katılarak daha fazla sütuna sahip geniş bir birine bir tablo genişletmek Katıldı.

Bir katılmak yaptığınızda, bir tablonun satırları diğer karşılık belirtmek gerekir; Bu durumda, ben senin Kimliği alanı birbirine tabloları bağlayan birincil / yabancı anahtar olması gerekiyordu olduğunu varsayarak yaşıyorum. Bu yanlış ise özür dilemek - böylece eğer, ben düzgün size yardımcı olmak için daha fazla bilgiye ihtiyacınız olacaktır.


Düzenlenen soru başına:

Seni ilk is the one you want to use. So my first question is, did you call mysql_connect düzgün documentation for the mysql_query fonksiyonu . It has one required and one optional argument; the second argument is your connection handle. If you don't specify it, then PHP assumes that the last connection opened with mysql_connect için bağlantı ve başarıyla bu arama çalışması yaptı edeceğiz?

Eğer mysql_connect çağrı yaradığından emin değilseniz, o zaman sorun ne olabilir emin değilim. Ben açıkça mysql_query olarak bağlantıyı belirlemek böylece bir değişkene mysql_connect sonucunu atamak olsa da, bu zarar sanmıyorum. Belki aşağıdaki gibi bir şey:

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

Bu işe yaramazsa bana bildirin.

Evet, Platin Azure neye ihtiyacınız katılmak olduğunu, doğru olduğunu. Ancak, tablo tasarımı biraz yardıma ihtiyacı var.

Her diğer tabloları ilişkilendirmek gerekir. Bunu yapmak için kolay bir yoldur:

1) Add a column to table 1: "hobby_id" 2) Then each record record in table 1 needs to have the id from table 2 in the field "hobby_id"

Tablo 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

Tablo 2:

id | Hobby | Country | 
1 | Baseball | USA
2 | Hockey | Canada
3 | Horse Racing | Japan

Hobby_id tablo 2'de kimliği ile ilgilidir nasıl? Yani, Tablo 1, Bobby, Hokey oynar ve Mike Beyzbol oynuyor. Kimse at yarışı eşleşir.

Yani bu tabloları sorgulamak için, bu gibi görünecektir:

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

Sonucu olacaktır:

Hughes | Bobby | Hockey
Smith | Mike | Baseball

ve php kod sonra bu gibi görünüyor:

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

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

}