Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

INSERT mit Bedingungen

Empfohlene Antworten

Veröffentlicht

Hallo Leute, über die Suchfunktion hab ich leider nichts passendes gefunden, also schlagt mich bitte nicht falls es doch schon mal gefragt wurde ;-)

Ich möchte in einer Tabelle Artist und Title zu MP3s speichern.

z.B. Queen, Flash

Disturbed, Stupify

usw.

Das speichern selbst der Daten ist kein Problem. Nun soll man aber über eine Suchfunktion auf einer Webseite nach entsprechenden Liedern suchen können.

Um Tippfehler ausschließen zu können, verwende ich momentan folgenden Code um die passenden Lieder zu finden:


SELECT * FROM `lieder` 

WHERE SOUNDEX(artist)=SOUNDEX('$artist') 

AND SOUNDEX(title)= SOUNDEX('$title')

Das funktioniert auch soweit ganz gut und ignoriert einige Tippfehler. Nun ist die Frage, kann ich in einem INSERT-Statement eine Bedingung einbauen? So dass, wenn ein neues Lied für die Datenbank vorgeschlagen wird, ein ähnliches aber schon existiert, der Eintrag nicht erstellt wird? Die ersten Versuche in der Richtung sahen so aus:

SELECT CASE (SELECT * FROM `lieder` 

WHERE SOUNDEX(artist)=SOUNDEX('$artist') 

AND SOUNDEX(title)= SOUNDEX('$title')) 

WHEN 0 THEN

(INSERT INTO lieder (artitst,title) VALUES ('$artist','$title'))

ELSE END;

Bin ich da evtl schon auf dem richtigen Weg? Ich würde die Abfrage halt einfach gerne in ein Statement packen. Ich freue mich über jede Antwort und Danke schon mal ;-)

Hallo,

wie wärs, wenn Du einen zusammengesetzten Primary Key auf Artist und Titel legst. Wenn Du beim Insert eine Fehlermeldung erhältst, weil der Datensatz schon vorhanden ist, kannst Du diese Fehlermeldung nutzen, um sie als Vorschlag auszugeben.

Gruß

Heike

So dass, wenn ein neues Lied für die Datenbank vorgeschlagen wird, ein ähnliches aber schon existiert, der Eintrag nicht erstellt wird?

Nein das geht nicht. Allerdings ist deine Datenbank nicht normalisiert, denn der Künstlername sollte in einer eigenen Tabelle abgelegt werden. Dann kannst Du z.B. auch eine Auswahlliste anbieten aus der der User auswählen kann. Aber solange Du ein Freitextfeld anbietest, wirst Du immer damit leben müssen, dass ein falsch geschriebener Name in die DB kommt.

Hier noch was zum Thema Normalisierung. Dort ist es passenderweise auch schon am Beispiel einer Musikdatenbank erklärt.

Dim

Danke für die schnellen Antworten. Zum Thema Normalisierung hab ich mir schon einiges in der Uni anhören dürfen/müssen. Wollte es nur über den Weg erst mal versuchen. Aufsplitten der Tabelle und dann mit entsprechenden Primär-/Sekundärschlüsseln versehen ist nicht das Problem.

War aber so wie es gerade aussieht ein Denkfehler meinerseits :upps Danke nochmal. Hat sich damit erledigt :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.