MySQL soll im LIFO-Prinzip arbeiten.

abdellaui

Erfahrenes Mitglied
Guten Abend,

ich versuche eine Abfrage zu generieren, in der mit 2 Relationen gearbeitet wird. Dabei soll die Ausgabe aufsteigend sortiert sein. Die Abfrage soll bei 5 Tulpen beendet werden.

Virsuelle Darstellung:
Code:
table_1
+-------------+
|   id | wert |
+-------------+
|    1 | 1000 |
|    2 | 2222 |
|    3 | 1000 |
|    4 | 2222 |
|    5 | 1000 |
|    6 | 2222 |
|    7 | 1000 |
|    8 | 1000 |
|    9 | 1000 |
|   10 | 1000 |
+-------------+

table_2
+-------------+
|   id | wert |
+-------------+
|    1 | 1000 |
|    2 | 2000 |
+-------------+

Gewünschte Ausgabe
+-----------+
| id | wert |
+-----------+
| 10 | 1000 |
|  9 | 1000 |
|  8 | 1000 |
|  7 | 1000 |
|  6 | 2222 |
+-----------+

Mein Ansatz:
"SELECT t1.id,t1.wert FROM (SELECT * FROM table_1 ORDER BY id DESC) as t2, table_2 AS t2 WHERE t2.wert >= t1.wert LIMIT 5"


Die Abfrage soll nicht mit ODER BY t1.id DESC enden, da es um eine große DB handelt und die Antwortzeit enorm zunimmt.
Daher hatte ich mir vorgestellt "FROM (SELECT * FROM table_1 ORDER BY id DESC) as t2, table_2 AS t2" sei der richtige Ansatz, nur die Ausgabe ist nicht wie erwünscht :/

Danke im Vorraus.
 
Zuletzt bearbeitet:
Hi

dass Orders (ohne Limits etc.) auf Subqueries nichts bewirken ist normal.

Die Abfrage kann so nicht wirklich richtig sein. Erstens gibt es zB. zwei t2, andererseits ist das Ergebnis (auch geordert) nicht unbedingt das Gezeigte.

Bitte einmal textuell beschreiben, was gesucht wird. Die höchsten 5 IDs aus Tabelle 1, deren Wert kleiner als der maximale Wert von Tabelle 2 ist? Die höchsten 5 IDs aus Tabelle 1, deren Wert kleiner als der Wert der selben ID von Tabelle 2 ist? Oder...?
 
Die höchsten IDs aus Tabelle 1, deren Attribute die Kriterien der 2. Tabelle erfüllen. Dabei sollen Redundanten vermieden werden (GROUP BY id). Ich habe es schlecht dargestellt da 2000>=1000 ebenso gilt.
 

t1.preis BETWEEN t2.minpreis AND t2.maxpreis AND t1. name LIKE t2.gesuchtername


Tabelle 2 sieht dann folgend aus:
Code:
+------------------------------------------+
| id | minpreis | maxpreis | gesuchtername |
+------------------------------------------+
|  1 |    1000  |    2000  |  %beispiel%   |
|  2 |    1500  |    1500  |  %z.B.____2   |
+------------------------------------------+
 
Code:
SELECT t1.* FROM `tabelle_2` AS `t2` LEFT JOIN `tabelle_1` AS `t1`
ON t1.`id` IN (SELECT id FROM (
       SELECT `id` FROM `t1`
       WHERE (`name` LIKE t2.`name_regexp`)
       AND `preis` BETWEEN t2.`preisval` AND t2.`preisval2`
       ORDER BY `id` DESC LIMIT 5
       ) _tmp
)

Dies wäre mein Gedanken gang. Da man im Befehl IN nicht limitieren kann, bin ich es mit einer Selektion umgangen. Leider erkennt er nun die Werte der Tabelle 2 nicht :/
 
Code:
SELECT * FROM (
(SELECT * FROM `tabelle_2`) AS `t2`,
(SELECT * FROM `tabelle_1` ORDER BY id DESC) AS `t2`
)
WHERE (t1.`name` LIKE t2.`name_regexp`)
AND t1.`preisval` BETWEEN t2.`preisval` AND t2.`preisval2`
LIMIT 5
)_tmp
Dies war ein weiterer Experiment, leider ohne Erfolg..
Eventuell macht dies um Einiges klarer worauf ich hinaus will
 
Zur Aufagbenstellung aus dem Threadbeginn müsste das folgende SQL dein Resultat liefern
SQL:
select a.*
from table_1 a
where a.id <= (
		select max(t1.id) as max_id
		from table_1 t1, table_2 t2
		where t1.wert = t2.wert
	)
order by a.id desc
limit 5
Deine letzten SQL stimmen absolut nicht mit der erweiterten Anforderung überein. Beim Beispiel steht minpreis, in deinen SQL scheint das Feld wieder preisval zu heissen.
Wenn du dauernd die Namen wechselst, hilfst du uns nicht zu verstehen, was du überhaupt willst.

Das ist das, was ich jetzt interpretiert habe
SQL:
select a.*
from table_1 a
where a.id <= (
		select max(t1.id) as max_id
		from table_1 t1, table_2 t2
		where t1.wert between t2.minpreis and t2.maxpreis
			and t1.name like t2.gesuchtername
	)
order by a.id desc
limit 5
 
Leider bin ich nicht so ganz mit dem Ergebnis zu frieden :/

Ich will eine SQL-Abfrage erzeugen, die Tabelle 1 aufsteigend der ID ausliest.
Dabei soll sie alle Einträge auflisten, die den Kriterien der Tabelle 2 entsprechen. Bei 10 selektierten Einträgen soll die Abfrage erfüllt sein.
 
Wenn ich alle deine Beiträge lese, komme ich jedes mal wieder auf eine andere Anforderung.

Mach doch mal ein Beispiel wie im ersten Postings mit den aktuellen Anforderungen und den aktuellen Feldnamen.

Mein erstes SQL deckt genau die Anforderung aus Post 1 von dir. Alle weitere war Rätselraten.
Deine Neue Anforderung widerspricht sich mit dem Beginn des Posts.
 

Neue Beiträge

Zurück