2016-03-21 4 views
1

Ich habe eine MySQL-Tabelle genannt Kampagnen wie folgtMySQL - Innere in gleichen Tisch sitzen mit WHERE-Klausel

ID integer 
Name text 
isBalanced boolean 
redirects tinyint 

Ich versuche, eine SELECT-Abfrage zu erreichen, so dass ich alle Zeilen, wo isBalanced ist false PLUS nur eine DEFINIERTE Anzahl von Zeilen, in denen isBalanced wahr ist. Nachdem ich dieses Ergebnis erhalten habe, muss ich das einzige mit der niedrigsten Nummer redirects bekommen.

Ich weiß, dass es Möglichkeiten gibt, es zu tun, aber ich habe eine harte Zeit, um herauszufinden, wie. Dies ist, was ich bis kennengelernt

SELECT campaigns.id, campaigns.name, campaigns.isBalanced, campaigns.redirects 
FROM campaigns AS c 
INNER JOIN campaigns_2 AS c2 
WHERE c.isBalanced = 0 

aber ich nicht in der Lage bin nur einige von ihnen von der c2-Set auszuwählen, und dann neu zu gruppieren alle Filter die einzelnen mit geringsten Anzahl von redirects zu bekommen.

Jede Hilfe würde sehr geschätzt werden.

+0

zeigen einige Beispieldaten und das erwartete Ergebnis.Es ist nicht klar, was Sie brauchen. –

+0

Was ist Ihre "definierte" Anzahl von Zeilen? Sind diese IDs in einer Tabelle? Einige Kriterien? Denken Sie auch nicht an "Ich möchte diese Zeilen, dann möchte ich diese von denen bekommen". SQL ist set-based und Sie müssen sich selbst beibringen, in diesen Begriffen zu denken und nicht in sequenziellen Verarbeitungsbegriffen. –

+0

@TomH ja und nein, SQL ist auch irgendwie sequentiell. Z.B. Wenn Sie eine Unterabfrage auswählen, können Sie sie als zweistufigen Prozess betrachten. Auch Dinge wie IN oder EXISTS (oder sogar WHERE selbst) können als sequentieller Schritt betrachtet werden. – maraca

Antwort

3

Es klingt wie Sie union all wollen, vielleicht mit order by und limit:

select c.* 
from campaigns c 
where c.isBalanced = 0 
union all 
(select c.* 
from campaigns c 
where c.isBalanced = 1 
limit ?? 
) 
order by redirects 
limit 1; 

Die "definierte Anzahl" geht, wo die ?? ist.

+0

Sie brauchen nicht 'UNION ALL' hier, nur' UNION' – butterFlyNick

+0

@Stan. . . "UNION ALL" ist immer "UNION" vorzuziehen, es sei denn, Sie möchten speziell den Aufwand für das Entfernen doppelter Werte aufwenden. –

+0

Das ist es, @GordonLinoff. Vielen Dank. – wiredmark