2x select gemeinsam abfragen
2x select gemeinsam abfragen
am 09.09.2005 11:21:02 von mail
Hallo,
ich möchte 2 Abfragen in einer Abfrage zusammenfassen:
1. Abfrage
select * from linkliste where name like '%$na%'
2. Abfrage
select * from vereine where name like '%$na%'
Das Ergebis der gemeinsamen Abfrage soll die Summe der
Ergebnisse von 1. Abfrage und 2. Abfrage sein:
Gemeinsame Abfrage:
select * from linkliste where name like '%$na%' and select * from
vereine where name like '%$na%'
Funktioniert aber leider nicht. Ich mache wahrscheinlich etwas
grundsätzlich falsch.
Der Link: http://dev.mysql.com/doc/mysql/en/join.html
ist mir bekannt, ich werde aus dem Beschreibungstext aber nicht
schlau. Wie gesagt suche ich nicht die Schnittmenge der Ergebnisse
zweier Suchabfragen, sondern die Summe derer.
Für jede Hilfe bin ich sehr dankbar im voraus.
Grüße
Chris
Re: 2x select gemeinsam abfragen
am 09.09.2005 12:49:58 von Albert Weinert
Christoph Händel schrieb:
> ich möchte 2 Abfragen in einer Abfrage zusammenfassen:
http://dev.mysql.com/doc/mysql/de/union.html ?
Grüße
Albert
Re: 2x select gemeinsam abfragen
am 09.09.2005 15:00:28 von Nicolas Berr
Moin Christoph,
> ich möchte 2 Abfragen in einer Abfrage zusammenfassen:
> select * from linkliste where name like '%$na%'
> select * from vereine where name like '%$na%'
select * from linkliste,vereine where linkliste.name like '%$na%' or
vereine.name like '%$na%'
Gruß,
Nicolas
Re: 2x select gemeinsam abfragen
am 09.09.2005 16:38:55 von Tobias Kutzler
Nicolas Berr schrieb:
> Moin Christoph,
>
>
>> ich möchte 2 Abfragen in einer Abfrage zusammenfassen:
>> select * from linkliste where name like '%$na%'
>> select * from vereine where name like '%$na%'
>
>
> select * from linkliste,vereine where linkliste.name like '%$na%' or
> vereine.name like '%$na%'
*autsch* Ich glaube, dass löst das Problem des OPs nicht. Dann wird es
eher größer... Denn mit dieser Verknüpfung wird das Kreuzprodukt aller
Datensatze aus beiden Tabellen gebildet und zurückgegeben. Das sind dann
also x*y Datensätze, wenn x die Anzahl der Datensätze in der Tabelle
linkliste und y die Anzahl in der Tabelle vereine sind.
Ich denke eher, dass ein UNION hier weiterhilft. Allerdings nur dann,
wenn die Anzahl aller benötigten Spalten (hier scheinbar alle) sowie
deren Bezeichnung auch in beiden Tabellen gleich sind.
Allerdings wage ich den Sinn der Abfrage zu bezweifeln. Warum sollen
Linkliste und Vereinsliste in einer Abfrage zurückgegeben werden? Das
sind doch zwei unterschiedliche Arten von Daten... Wäre super, wenn
Christoph nochmal sagen würde, was er mit den Daten vorhat. Dann ists
vielleicht einfacher zu helfen.
Ciao,
Tobias
Re: 2x select gemeinsam abfragen
am 09.09.2005 18:26:11 von mail
Tobias Kutzler wrote:
> Nicolas Berr schrieb:
>
>> Moin Christoph,
>>
>>
>>> ich möchte 2 Abfragen in einer Abfrage zusammenfassen:
>>> select * from linkliste where name like '%$na%'
>>> select * from vereine where name like '%$na%'
>>
>>
>>
>> select * from linkliste,vereine where linkliste.name like '%$na%' or
>> vereine.name like '%$na%'
>
>
> *autsch* Ich glaube, dass löst das Problem des OPs nicht. Dann wird es
> eher größer... Denn mit dieser Verknüpfung wird das Kreuzprodukt aller
> Datensatze aus beiden Tabellen gebildet und zurückgegeben. Das sind dann
> also x*y Datensätze, wenn x die Anzahl der Datensätze in der Tabelle
> linkliste und y die Anzahl in der Tabelle vereine sind.
>
> Ich denke eher, dass ein UNION hier weiterhilft. Allerdings nur dann,
> wenn die Anzahl aller benötigten Spalten (hier scheinbar alle) sowie
> deren Bezeichnung auch in beiden Tabellen gleich sind.
>
> Allerdings wage ich den Sinn der Abfrage zu bezweifeln. Warum sollen
> Linkliste und Vereinsliste in einer Abfrage zurückgegeben werden? Das
> sind doch zwei unterschiedliche Arten von Daten... Wäre super, wenn
> Christoph nochmal sagen würde, was er mit den Daten vorhat. Dann ists
> vielleicht einfacher zu helfen.
>
> Ciao,
> Tobias
Ich habe 2 Tabellen. Die 1. mit vielen Links und Beschreibungstexten und
Name der Website dazu. die 2. Tabelle hat eine andere Struktur, aber
die Spalten "name" "url" und "beschreibung" sind hier in der Struktur
auch enthalten.
Beide Tabellen - wie gesagt - möchte ich gleichzeitig auf name, url und
beschreibung abfragen und gemeinsam ausgeben (name, url, beschreibung)
(alle 3 Spalten sind varchar(60));
Gruß
Chris
Re: 2x select gemeinsam abfragen
am 09.09.2005 20:15:58 von Albert Weinert
Christoph Händel schrieb:
> Ich habe 2 Tabellen. Die 1. mit vielen Links und Beschreibungstexten und
> Name der Website dazu. die 2. Tabelle hat eine andere Struktur, aber
> die Spalten "name" "url" und "beschreibung" sind hier in der Struktur
> auch enthalten.
>
> Beide Tabellen - wie gesagt - möchte ich gleichzeitig auf name, url und
> beschreibung abfragen und gemeinsam ausgeben (name, url, beschreibung)
> (alle 3 Spalten sind varchar(60));
Dann ist UNION dein Freund.
select name, url, beschreibung from tabelle1 where name like '%$na%' union
select name, url, beschreibung from tabelle2 where name like '%$na%'
Grüße
Albert
Re: 2x select gemeinsam abfragen
am 09.09.2005 20:18:40 von Tobias Kutzler
Christoph Händel schrieb:
> Ich habe 2 Tabellen. Die 1. mit vielen Links und Beschreibungstexten und
> Name der Website dazu. die 2. Tabelle hat eine andere Struktur, aber
> die Spalten "name" "url" und "beschreibung" sind hier in der Struktur
> auch enthalten.
>
> Beide Tabellen - wie gesagt - möchte ich gleichzeitig auf name, url und
> beschreibung abfragen und gemeinsam ausgeben (name, url, beschreibung)
> (alle 3 Spalten sind varchar(60));
Dann nimm folgende Abfrage:
SELECT name, url, beschreibung FROM linkliste WHERE name LIKE '%$na%'
UNION SELECT name, url, beschreibung FROM vereine WHERE name LIKE '%$na%'
Das listet alle Links aus beiden Tabellen direkt untereinander auf bzw.
gibt sie zurück. Als Krönung des ganzen kannst Du ganz zum Schluss auch
noch ein ORDER BY angeben und die *gesamte* durch UNION erzeugte Liste
sortieren lassen.
SELECT name, url, beschreibung FROM linkliste WHERE name LIKE '%$na%'
UNION SELECT name, url, beschreibung FROM vereine WHERE name LIKE
'%$na%' ORDER BY beschreibung
sortiert etwa die gesamte Liste nach der Beschreibung.
HTH,
Tobias