subselect
sebo
- datenbank
hatte ich neulich schonmal gefragt, hoffe aber diesmal auf kompetentere hilfe:
SELECT
a.name,
(SELECT id, name, weight, height, border, title FROM photos WHERE user_id = a.id LIMIT 0,1) AS (userid, username, weight, height, border),
a.handy
FROM defaultusers a
WHERE
a.status = 'N',
...weitere bedingungen
ORDER BY a.datum DESC
LIMIT 0,10
Das SubSELECT muss nicht zwingend ein Ergebnis rückliefern.
Wenn es aber ein Ergebnis hat, dann möchte ich es gern in das Main-Select übernehmen. Weiss jemand wie man es hinbekommen kann? Leider fällt mir auch nicht ein, wie man es mit AS anstellen kann.
Ein JOIN kommt hier auch nicht in Frage, da JOIN's auf große Datenbanken nicht im Zusammenhang mit SQL_CALC_FOUND_ROWS funktionieren, da SQL_CALC_FOUND_ROWS auch den JOIN durchgeht und so die Ausgabe um bis zu 30 Sekunden verzögert.
Ein Messung hat jedoch ergeben, dass es einfacher ist auf einen JOIn zu verzichten, als auf SQL_CALC_FOUND_ROWS, denn die einzige Alternative: Ein weiteres Statement mit COUN() würde mit derselben WHERE-klausel noch lahmer sein als SQL_CALC_FOUND_ROWS+JOIN.
Deshalb möchte ich die Verbindung zur größeren Datenbank (über 400.000 Datensätze) in einem Subselect herstellen der in dieser Hinsicht deutlich schneller ist.
Leider bekomme ich die Werte aus dem Subselect mit AS nicht raus.
Hat jemand eine Idee?
hi,
hatte ich neulich schonmal gefragt, hoffe aber diesmal auf kompetentere hilfe
Abgesehen davon, dass ich eine solche Aussage denen gegenüber, die dir zu helfen versucht haben, ziemlich unverschämt finde - bitte unterlasse Doppelpostings.
Ich weiss zwar jetzt nicht ganz exakt, zu welchem von deinen mehreren Threads der vergangenen Tage dies hier die Fortsetzung darstellt - aber da du die SQL_CALC_FOUND_ROWS-Sache ja hier schon angesprochen hattest, schlage ich vor, du bleibst mit dem ja immer noch sehr ähnlich gelagerten Problem in diesem Thread.
gruß,
wahsaga
Lies bitte meinen Beitrag. Um die Beteiligung von solchen Leuten zu vermeiden habe ich mich extra ausdrücklich formuliert!
Das Thema hat nichts mit JOIN zu tun.
Hier gehts um AS !
Wie bekommt man mehrere Werte aus einem Subselect OHNE JOIN!
hi,
Lies bitte meinen Beitrag. Um die Beteiligung von solchen Leuten zu vermeiden habe ich mich extra ausdrücklich formuliert!
Du nimmst doch wohl nicht wirklich an, deine Chance auf Antworten zu deinem Problem zu erhöhen, in dem du jetzt noch mehr rumgiftest?
Das Thema hat nichts mit JOIN zu tun.
Hier gehts um AS !
Es ist m.E. nach wie vor stark verwandt.
Auch mit Folgefragen, die sich vielleicht erst aus dem Verwerfen eines vorherigen Ansatzes, der sich als ungünstig herausgestellt hat, ergeben, kannst du gut und gern im gleichen Thread bleiben. Das erhöht die Übersichtlichkeit für alle hier, und auch die Begleitumstände deines Vorhabens sind damit für andere leichter überschaubar, weil an einem Ort gebündelt.
gruß,
wahsaga
Hallo sebo,
hatte ich neulich schonmal gefragt, hoffe aber diesmal auf kompetentere hilfe:
willst Du wirklich Hilfe?
Du hast von mir eine kompetente und korrekte Antwort auf Deine Frage erhalten.
Du hast von mir viele kompetente und korrekte Antworten erhalten.
https://forum.selfhtml.org/?t=152213&m=990119
Bereits dort reagierst Du ungehalten mit Hinweis auf ein Posting auf eine Nachfrage von mir, die _vor_ diesem Posting geschrieben wurde.
Du hast dort konkrete kompetente Hilfe erhalten, auch von mir.
https://forum.selfhtml.org/?t=152214&m=990123
korrekte konkrete Hilfe in 12 Minuten. Keine Reaktion von Dir!
https://forum.selfhtml.org/?t=152230&m=990243 (auf das Du Dich hier beziehst)
korrekte kompetente Antwort von mir, keine Antwort, keine weitergehenden Informationen von Dir. Lustige Antwort vom King :-)
https://forum.selfhtml.org/?t=152231&m=990251
Nachfrage von Ilja.
Noch etwas. Poste doch die von Dir genutzten _beiden_ Abfragen. Zum Nachtesten wäre das sehr hilfreich.
Und jetzt das hier. Alle Fragen zum gleichen Komplex, zum gleichen Problem, dass Deine Queries zu lange brauchen. Fünffachposting. Kompetente Hilfe hast Du bekommen - eine positive Reaktion Deinerseits: Fehlanzeige.
Wenn Du Dein Problem nicht vernünftig darstellen kannst, dann ist das Dein Problem, nicht das der potentiellen Helfer.
Willst Du wirklich noch Hilfe? Dann ändere umgehend Dein Auftreten!
Verärgerte Grüße
Vinzenz
Willst Du wirklich noch Hilfe? Dann ändere umgehend Dein Auftreten!
Schon ziemlich krass dieser sebo, der raffts einfach nicht, meint aber den Durchblick zu haben, eine fatale Kombination.
Die Versuche mit dem SubSELECT sind schon ziemlich mitleiderregend, wenn ich sowas machen würde, würde ich das zumindest nicht öffentlich tun. ;)
Aber dennoch unterhaltsam, dem werde ich auch bei fortgesetzter Denkverweigerung helfen, Ok, mag sein, dass auch mal böse Hilfe dabei sein wird.
yo,
gemeckert haben ja schon Vinz und Wahsaga über dein verhalten und ich finde auch zurecht. aber um die fronten wieder ein wenig aufzulockern, kann man ja noch mal versuchen, ein positives ergebnis herauszuarbeiten. vorher aber noch ein paar anmerkungen.
eine subselect, der in der select klausel angezeigt werden soll, darf nur einen wert zurück liefern und zwar horizontal und vertikal, period.
eine datenmenge von 400.000 datensätze ist kein grosser datenbestand, period.
deine zeitangaben sind nicht vergleichbar, weil du bei der einen anweisung eine limit klausel benutzt hast, sprich die ergebnismenge dadurch reduziert hast und somit auch die ausführungszeit. Beim zählen (egal ob mit funktion oder count) muss er aber die gesamte menge durchgehen. das ist ein ganz erheblicher unterschied.
in der einen LEFT JOIN anweisung [Link:http://forum.de.selfhtml.org/?t=152231&m=990251], fehlt schon mal die join bedingung. insofern ist mir noch nicht ganz klar, ob du die von dir so abgelehnten joins richtig angewandt hast. letztlich sind die joins wohl das mittel, die dich zum ziel führen.
indexe ist ein wichtiges thema, vor allem wenn die where bedingung komplez ist, sprich mehrere kriterien gleichzeitig verglichen werden müssen. da gibt es sicherlich noch viel spielraum.
es gibt also noch vieles zu klären, um eine gute lösung zu finden. und dabei ist die kompetenz der teilnehmer hier im forum das geringste problem.
mein vorschlag, mal unabhängig davon, wie man genau nun die select anweisung umsetzt, schreib doch einfach mal, wie deine betroffenen tabellen aufgebaut sind und welches ergebenis du genau daraus haben willst, am besten immer mit beispieldaten.
Ilja
Hi,
vielleicht ist ja der "mediumblob" in der Tabelle Fotos der Bösewicht und verlangsamt die Abfragen ... einfach mal n Schuss ins Dunkle, ich kenn mich nicht so aus damit, wie blobs in mysql intern behandelt werden. Da die Abfrage(n) aber theoretisch (aus meiner Sicht) alle über die Indizes laufen (können) sollte das Vorhandensein des BLOB in der Tabelle eigentlich keine Auswirkung haben.
Cheers, Frank