Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > Datenbanken > Datenbanken

Datenbanken Alles rund um MySQL, MariaDB, PostgreSQL o.ä. und die NoSQL-Datenbanken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10.08.2017, 15:36
stefanstp stefanstp ist offline
Engagierter Besucher
 
Registriert seit: 19.07.2005
Beiträge: 204
Standard not in Funktion läuft nicht so, wie ich es mir dachte

Ich habe habe eine Spalte "gekaufte_artikel" und darin stehen alle Produkte, die der Kunde gekauft hat Komma getrennt z. B. 359,124,7

Jetzt möchte ich alle Kunden eine Mail schreiben, die bestimmte Produkte nicht kauft haben. Das würde ich so machen:

SELECT *
FROM bestellungen_stammdaten
WHERE gekaufte_artikel not in(359,220)

Leider geht es nicht, wenn ein Kunde mehrere Produkte gekauft hat. Hätte ein Kunde nur 359 oder 220 gekauft, dann geht die Abfrage. Wie könnte ich es sonst gut machen, ohne Like zu benutzen?

Habt ihr eine Idee?

Danke euch sehr!

Gruß

Stefan
Mit Zitat antworten
  #2  
Alt 10.08.2017, 15:43
Kasalop Kasalop ist offline
Forum-Mitarbeiter
 
Registriert seit: 29.12.2006
Ort: München
Beiträge: 5.688
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Du musst deine Datenstruktur normalisieren:
GOOGLE-ANREGE-SERVICE(TM)

Mindestens auf Normalisierungsgrad 3.

Du könntest auch sehr sehr unschön irgendetwas mit regulären ausdrücken basteln, aber das ist eigentlich nicht der sinnvolle Weg. normalisier deine Daten und dann kannst du das recht einfach abfragen.

Lg Kasalop
__________________
Es gibt 10 Arten von Menschen auf der Welt. Die die die binäre Mathematik verstehen und die die sie nicht verstehen!

Zu welcher der Gruppen gehörst du?
Mit Zitat antworten
  #3  
Alt 10.08.2017, 18:32
tk1234 tk1234 ist offline
Engagierter Besucher
 
Registriert seit: 07.06.2012
Beiträge: 1.313
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Zitat:
Zitat von stefanstp Beitrag anzeigen
Habt ihr eine Idee?
Es gäbe noch die Funktion FIND_IN_SET() was aber ziemlich auf die Geschwindigkeit gehen wird. Wie schon geschrieben: reparier dein Datenbankdesign.
Mit Zitat antworten
  #4  
Alt 10.08.2017, 21:23
mareje mareje ist offline
Engagierter Besucher
 
Registriert seit: 13.04.2007
Beiträge: 255
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Für den Moment funktioniert vielleicht (ungetestet)

SQL Quellcode:
SELECT *
FROM bestellungen_stammdaten
WHERE gekaufte_artikel NOT IN(359)
AND gekaufte_artikel NOT IN(220)


Aber wie schon von meinen Vorgängern geschrieben - normalisiere dein Datenbankdesign!
Ich hatte es auch früher wie du mit Kommas in einem Feld gespeichert. Aber glaub mir, mit normalisierten Datenbanken arbeitet es sich viel leichter, logischer und fehlerunanfälliger. Und ich bin kein Profi, hab das mir alles im learning by doing selber beigebracht.

EDIT: SELECT * sollte auch nicht verwendet werden. Zähl die Felder auf, die du ausgeben willst. Idealerweise noch mit eindeutigen Bezeichnungen für diese Ausabe (SELECT tbl.set1 AS Feldname1, tbl.set7 AS Feldname2, .... FROM tbl ....)

Geändert von mareje (10.08.2017 um 21:25 Uhr)
Mit Zitat antworten
  #5  
Alt 10.08.2017, 21:37
tk1234 tk1234 ist offline
Engagierter Besucher
 
Registriert seit: 07.06.2012
Beiträge: 1.313
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Zitat:
Zitat von mareje Beitrag anzeigen
Für den Moment funktioniert vielleicht (ungetestet)[…]
Nein, das wird nicht funktionieren.

Zitat:
EDIT: SELECT * sollte auch nicht verwendet werden. Zähl die Felder auf, die du ausgeben willst. Idealerweise noch mit eindeutigen Bezeichnungen für diese Ausabe (SELECT tbl.set1 AS Feldname1, tbl.set7 AS Feldname2, .... FROM tbl ....)
Damit dass man SELECT * nicht verwenden sollte hast du recht, aber eindeutige Bezeichnungen sind idR auch nicht nötig, die Spalten sollten eigentlich normalerweise sinnvolle Bezeichnungen haben - und sollten sie nummeriert sein wie in deinem Beispiel deutet das auch auf ein kaputtes Datenbankdesign hin.
Mit Zitat antworten
  #6  
Alt 11.08.2017, 07:53
stefanstp stefanstp ist offline
Engagierter Besucher
 
Registriert seit: 19.07.2005
Beiträge: 204
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Zitat:
Zitat von mareje Beitrag anzeigen
Für den Moment funktioniert vielleicht (ungetestet)

SQL Quellcode:
SELECT *
FROM bestellungen_stammdaten
WHERE gekaufte_artikel NOT IN(359)
AND gekaufte_artikel NOT IN(220)

Funktioniert nur, wenn der Kunde diese zwei Artikel gekauft hat, sobald der aber noch ein 3. gekauft hat, geht es nicht.

Dafür geht aber das hier:

SELECT * FROM bestellungen_stammdaten WHERE find_in_set("359",gekaufte_artikel) =0 and find_in_set("220",gekaufte_artikel) =0

auch die Abfragezeit ist sehr gut: 58824 total, Query took 0.0006 seconds.
Mit Zitat antworten
  #7  
Alt 11.08.2017, 11:22
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 30.890
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Zitat:
Zitat von stefanstp Beitrag anzeigen
auch die Abfragezeit ist sehr gut: 58824 total, Query took 0.0006 seconds.
Mit oder ohne Query-Cache?
Mit Zitat antworten
  #8  
Alt 11.08.2017, 11:24
stefanstp stefanstp ist offline
Engagierter Besucher
 
Registriert seit: 19.07.2005
Beiträge: 204
Standard AW: not in Funktion läuft nicht so, wie ich es mir dachte

Habe gerade eine neue Abfrage nach 3 Stunden gemacht mit anderen Werten, auch so schnell.
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Aufruf von php Funktion läuft nicht. prisiweb JavaScript 10 03.09.2014 14:33
script läuft nicht mehr seit server mit save mode on läuft arpi2008 PHP 2 28.03.2008 20:57
Md5-verschlüsselung via Md5()-funktion läuft auf Win32 nicht? Butterbread_001 PHP 8 13.04.2005 16:02
Funktion läuft nicht! hammelwurst Datenbanken 1 12.04.2005 01:28
Ich dachte Frauen schauen nicht auf die (daten)größe Papa PHP PHP 13 02.12.2004 08:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:02 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC