Birden fazla tabloda arama - bir sütun olarak sonuç verir

4 Cevap php

Stackoverflow Hey - Bu benim ilk soru.

Benim mySQLdb 2 tablolar var.

[tab_artist]
|id|artist|count  

[tab_songtitle]
|id|songtitle|artistId

Önermek gibi tab_artist.artist ve tab_songtitle.songtitle hem seçmek için çalışıyor Im burada searchclause = m

Ben denedim

SELECT artist, songtitle AS suggest 
FROM tab_artist, tab_songtitle 
WHERE artist LIKE('m%') OR songtitle LIKE('m%')

Ama bu bana 2 sütun, sanatçı verir ve önermek

arama yerine ise ben bana örn vermek sanatçı gerekir metallica .. ama sadece bir kez - ama songTitles yılında tanıştığım ile başlayan tüm başlıkları gerek.

Bu doğru uzmana Sense yapar umarım :)

4 Cevap

A union bunu yapmalıyım:

select artist    AS suggest from tab_artist    WHERE artist    LIKE 'm%'
union all
select songtitle AS suggest from tab_songtitle WHERE songtitle LIKE 'm%'

Bu durumda, ben union all bu yüzden çiftleri çıkarıldı almazsınız kullanmak istiyorsunuz, ama örneğin, Metallica kendi adını taşıyan albümü var ve sadece kelime bir kez görünmesini istiyorsanız, eğer bu isteyebilirsiniz. Bu durumda, union daha uygun olacaktır.

Bir katılmak gerekir:

Select artist, songtitle from tab_artist inner join tab_songtitle on tab_songtitle.artistID = tab_artist.ID where artist LIKe ('m%') OR songtitle like ('m%')

SQL UNION kullanmak istiyorum

select id, artist, count FROM table1
UNION
select id, title, artistid from table2

Temelde iki sonuç dikey ayarlar concats. Orada bazı kısıtlamalar ve değişiklikler vardır, ama genellikle tüm yapmanız gereken bu.

Sanatçı ve şarkı tablodan sonuçlarını birleştirmek için UNION ALL kullanın.

SELECT 'Artist' AS type, id, artist AS suggest
FROM tab_artist
WHERE artist LIKE 'm%'
UNION ALL
SELECT 'Song', id, songtitle
FROM tab_songtitle
WHERE songtitle LIKE 'm%'

Bazı sorgu sonuçlarına DISTINCT Bu tamamen gereksiz (ve pahalı) yapacak kadar önerdiği gibi UNION kullanmayın.