Zum Inhalt springen

[mySQL] SUBSTR() Frage


Morfois

Empfohlene Beiträge

Hallöchen.

Nun habe ich in diesem Forum zu diesem Thema nichts gefunden, desswegen stelle ich meine frage einfach mal. Sollte es hier trotzdem schon mal diskutiert worden sein, ziehe ich schon mal meinen kopf ein! ^^

Also ich habe eine Frage. Und zwar will ich ungefähr diesen Query aufbauen:

SELECT name

FROM tabelle

WHERE erster_buchstabe = 'A'

nun habe ich mal nachgeforscht und mir das hier zusammengebastelt:

SELECT name

FROM db_rides

WHERE SUBSTRING(name FROM 1 FOR 1)='A'

ORDER BY name ASC;

nun habe ich aber nicht nur die db_rides, sondern auch die folgenden tabellen, die ich mit in den query einbeziehen möchte:

db_hotels.name

db_parks.name

db_kirmes.name

db_firma.name

Meine frage: wie muss der query aussehen, damit ich die namen, wo der erste buchstabe ein A ist, aus allen tabellen zurückbekomme?

Gruß

Morfois

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oha, vielen dank für die vielen schnellen antworten.

Also das mit dem joinen, was der phadiax angesprochen hat, funktioniert nicht, das habe ich bereits ausprobiert. man bekommt nichts zurück!

Was ich interessant finde ist der like befehl. Wie würde sich das denn dann auf die performance auswirken? immerhin ist das für mich interessant, weil alleine die db_rides ca. 650 einträge hat, die immer mehr werden (giebt halt genug achterbahnen auf der welt ^^ )

Auf union bin ich bisher nicht gekommen, habe immer nur per join versucht. Werde es direkt mal probieren! :-)

gruß

Morfois

______________________________________________________________

So, das mit UNION klappt super, jetzt hab ich alle namen wo ein A am anfang steht! :-)

Nur woher weis ich denn welcher name aus welcher tabelle stammt??? (isn bissl unübersichtlich)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was ich interessant finde ist der like befehl. Wie würde sich das denn dann auf die performance auswirken? immerhin ist das für mich interessant, weil alleine die db_rides ca. 650 einträge hat, die immer mehr werden (giebt halt genug achterbahnen auf der welt ^^ )

Es würde sich positiv auf die Performance auswirken. Wie genau kann ich dir nicht sagen, aber die substr Lösung sind schonmal 2 Aktionen, die der Server machen muss (Str kopieren und dann vergleichen) und die like Version vergleicht nur.

Aber 650 Einträge sind doch nix ;) Denke, da wirst du nichtmal nen Unterschied merken, nur im Millisekunden Bereich.

EDIT:

Denke aber, die Union-Lösung ist die bessere, weil du keinen eindeutigen Schlüssel hast, mit dem du die Dateien verjoinen kannst. Es wird also jeder Satz jeder Datei an jeden Satz der anderen Datei gehängt.

Was hast du mit der Abfrage denn vor? Alle Namen mit A Filtern und anzeigen? Dann mach lieber 4 Abfragen daraus, weil du dann genau weisst wo sie herkommen und sie entprechend anzeigen kannst.

Ansonsten weisst du nicht woher der Satz stammt, ausser du schreibst den Tabellennamen vor den Namen (concat('db_rides',' - ', name)).

EDIT2:

oder du machst daraus:

SELECT 'Tabellenname', name from ... where name like 'A%'

Das musst du aber von Hand jeweils ins SELECT schreiben (bei der Lösung davor auch)

Link zu diesem Kommentar
Auf anderen Seiten teilen

aha soweit so gut. naja ok 650 ist wirklich nicht viel ^^

ich habe damit folgendes vor:

Ich habe eine seite, wo mann das alphabet sieht (abc usw.) und möchte nun erreichen, dass wenn man beispielsweise auf "a" klickt aus den oben genannten tabellen jeder name mit nem "a" am anfang angezeigt wird, mit einem sysmbol vorne vor, wo der besucher anhand einer legende vergleichen kann, ob dieser name eine achterbahn, ein freizeitpark, eine firma, ein wort aus dem lexicon, usw. ist! Desswegen muss ich auch wissen aus welcher tabelle der name ursprünglich stammt. Diese ganze liste sollte sortiert sein, jedoch nich nach der ursprungstabelle sondern alle insgesammt alphabetisch nach name.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Diese ganze liste sollte sortiert sein, jedoch nich nach der ursprungstabelle sondern alle insgesammt alphabetisch nach name.

Dann ist ein Union SELECT das einzige, was du da machen kannst. Mit einem UNION SELECT werden mehrere Abfragen zu einem Ergebnis zusammengefasst. Wichtig ist nur, dass die Anzahl und Art der Ergebnisfelder übereinstimmt. Und für jede Abfrage hängst du noch ein Feld mit dem Namen oder einem Kennzeichen dran, also:


SELECT 'X', name FROM TabelleA WHERE name LIKE 'A%' OR name LIKE 'a%'

UNION

SELECT 'Y', name FROM TabelleB WHERE name LIKE 'A%' OR name LIKE 'a%'

ORDER BY name

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...