SQL Abfrage
mixmastertobsi
- datenbank
Hallo,
wie kann ich denn folgende Abfrage besser gestalten? Was mich stört ist, ist dieses artikel.available='1'
SELECT * FROM artikel WHERE artikel.kategorie1 LIKE '10%' AND artikel.available='1' OR artikel.kategorie2 LIKE '10%' AND artikel.available='1
Hallo,
wie kann ich denn folgende Abfrage besser gestalten? Was mich stört ist, ist dieses artikel.available='1'
artikel.available ist hoffentlich kein String - wenn das der Fall ist, eliminiere die Hochkommata.
Weiters: du kansnt Klammern in deinen Statements verwenden.
Zudem ist es nicht notwendig den Tabellennamen zu präfixen wenn du ohnehin nur eine Tabelle in der abfrage hast. Wenn du das trotzdem möchtest, kannst du ein Alias verwenden.
SELECT * ist auch in den seltensten Fällen schlau, meistens willst du nicht restlos alle Felder haben - artikel.available wird dich später z.B. nicht mehr interessieren, wenn du das ohnehin schon per WHERE-Clause filterst.
Hallo,
das war auch nur eine Beispielabfrage.
Wie wäre denn solch eine Abfrage in Klammern?
das war auch nur eine Beispielabfrage.
Ach wirklich?
wie kann ich denn folgende Abfrage besser gestalten?
Wie wäre denn solch eine Abfrage in Klammern?
'foo' and 'baz' or 'bar' and 'baz'
ist gleichwertig zu
('foo' or 'bar') and baz
Hi!
wie kann ich denn folgende Abfrage besser gestalten? Was mich stört ist, ist dieses artikel.available='1'
artikel.available ist hoffentlich kein String - wenn das der Fall ist, eliminiere die Hochkommata.
Ich vermute es ist eine boolsche Information, die durch die beiden Werte 0 und 1 (genauer: alles andere als 0) in der Spalte ausgedrückt wird. Man kann in dem Fall auch einfach nur "WHERE available" schreiben.
SELECT * ist auch in den seltensten Fällen schlau, meistens willst du nicht restlos alle Felder haben - artikel.available wird dich später z.B. nicht mehr interessieren, wenn du das ohnehin schon per WHERE-Clause filterst.
Formulier das doch ein bisschen neutraler, oder kennst du eine belastbare Statistik, die deine Wortwahl unterstützt?
SELECT * ist nicht immer die beste Wahl, zum Beispiel dann, wenn nicht alle Felder im Abfrageergebnis benötigt werden - ... (der Rest ist ok.)
Letztlich kommt es darauf an, ob man wirklich Einsparungen erzielen kann. In diesem Fall ist available (vermutet) ein Zeichen/Byte groß. Alle Feldnamen zusammen sind X Zeichen/Bytes. Das rechnet sich erst, wenn bei den Abfragen durchschnittlich mindestens X Datensätze im Ergebnis sind (jetzt mal nur die Datenmenge ohne Overhead betrachtet und sonstige Nebenwirkungen unbeachtet gelassen).
Lo!
Ich vermute es ist eine boolsche Information, die durch die beiden Werte 0 und 1 (genauer: alles andere als 0) in der Spalte ausgedrückt wird. Man kann in dem Fall auch einfach nur "WHERE available" schreiben.
Das kommt darauf an - vor MySQL 5 wurde z.B. zwischen TINYINT und BIT nicht unterschieden, andere DMBS unterscheiden nichtmal zwischen BOOL und TINYINT(1) - MSSQL hat das afaik mal gemacht.
Formulier das doch ein bisschen neutraler, oder kennst du eine belastbare Statistik, die deine Wortwahl unterstützt?
Nein - kennst du eine die das Gegenteil belegt? :D
Hi!
Ich vermute es ist eine boolsche Information, die durch die beiden Werte 0 und 1 (genauer: alles andere als 0) in der Spalte ausgedrückt wird. Man kann in dem Fall auch einfach nur "WHERE available" schreiben.
Das kommt darauf an - vor MySQL 5 wurde z.B. zwischen TINYINT und BIT nicht unterschieden, andere DMBS unterscheiden nichtmal zwischen BOOL und TINYINT(1) - MSSQL hat das afaik mal gemacht.
Macht bei MySQL nichts, das geht da auch mit jedem ausgewachsenen Integer und sogar mit (VAR)CHARs (da zählen Leerstring und Leerzeichensstrings wie 0).
Formulier das doch ein bisschen neutraler, oder kennst du eine belastbare Statistik, die deine Wortwahl unterstützt?
Nein - kennst du eine die das Gegenteil belegt? :D
Nein, dewegen empfehle ich ja auch eine neutrale und keine gegenteilige Formulierung.
Lo!