SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.03.2009, 12:15:20
Michi77 Michi77 ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 5
Mehrfachkriterium in einem Feld

Hallo,

ist wahrscheinlich ne Anfängerfrage, von daher – schon mal sorry ;-). Ich habe folgendes Problem:

Ich habe insgesamt 3 Tabellen, nämlich [betriebe], [kontakte] und [infomaterial]. Wenn wir mit den Betrieben Kontakt haben, vereinbaren wir oft, dass diese Infomaterial erhalten – dies können mehrere verschiedene Infomaterialien sein.

Der Mitarbeiter erfasst also unter [kontakte] durch Anklicken mehrerer Checkboxen das zu versendende Infomaterial. Dabei wird dem Feld [kontakte].[infomaterial] die jeweilige id des infomaterials hinzugefügt – und zwar mit Komma getrennt in ein Feld vom Typ „Tinytext“.

Dieses Feld hat also z. B. folgenden Inhalt: 4,3,15,7

Nun möchte ich bei einer Abfrage nach Eingabe der Betriebs-ID beim Feld [betriebe].[betriebs_id] alle Infomaterialien aufgelistet bekommen, die dieser Betrieb bekommt.

Problem: Ich habe keine Ahnung, wie ich den mehrfachen Inhalt des Feldes [kontakte].[infomaterial] als Kriterium heranziehen soll.

Meine Tabellen haben folgende Felder (Auszug):

[betriebe]
betriebs_id


[kontakte]
kontakt_id
betriebs_id
infomaterial


[infomaterial]
infomaterial_id
infomaterialname
infomaterialbeschreibung


Wie man sieht, wird unter [kontakte] die betriebs_id aus [betriebe] als Fremdschlüssel gespeichert. Hier hätte ich also eine Verbindung und die brauche ich auch, da ich NUR aufgrund des Kriteriums [betriebs_id] diese Abfrage starten kann.

Aber wie bekomme ich es per SQL hin, dass ich aufgrund der Eingabe der betriebs_id eine Auflistung des Infomaterials (und zwar eine Zeile pro Infomaterial) mit den Daten [infomaterialname] und [infomaterialbeschreibung] erhalte?

Gäbe es da dieses „FIND IN“ oder „FIND IN SET“ oder so?

Vielen Dank für Eure Hilfe!

Viele Grüße!

Michael

Geändert von Michi77 (22.03.2009 um 12:16:47 Uhr)
Mit Zitat antworten
  #2  
Alt 22.03.2009, 12:38:33
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Mehrfachkriterium in einem Feld

Als erstes solltest du dein Tabellendesign ändern: Alle IDs als String in einer Spalte zu speichern ist nämlich keine gute Grundlage (Siehe Normalform). Ich würde also vorschlagen, die kontakt-Tabelle erst einmal in eine Verbindungstabelle abzuändern (Die vorhandenen Einträge der Tabelle müssen natürlich wieder importiert werden):

Code:
CREATE TABLE kontakte (
  betriebs_id int(10) unsigned NOT NULL,
  infomaterial_id int(10) unsigned NOT NULL,
  PRIMARY KEY  (betriebs_id,infomaterial_id)
) ENGINE=MyISAM;
Damit lässt sich dann das gewünschte Ergebniss erzielen:
Code:
SELECT i.infomaterial_id
     , i.infomaterialname
     , i.infomaterialbeschreibung
  FROM betriebe AS b
INNER
  JOIN kontakte AS k
    ON k.betriebs_id = b.betriebs_id
INNER
  JOIN infomaterial AS i
    ON i.infomaterial_id = k.infomaterial_id
 WHERE b.betriebs_id = 123;
Mit Zitat antworten
  #3  
Alt 22.03.2009, 13:12:02
Michi77 Michi77 ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 5
AW: Mehrfachkriterium in einem Feld

Vielen Dank erstmal!

Das wäre natürlich eine Möglichkeit, damit hätte ich eine saubere Verbindung zwischen den Tabellen.

Das Problem ist halt, dass ich die Abfrage nicht "einmal und nie wieder" ausführen will, sondern das ist ein laufender Prozess. Wir haben in Zukunft immer wieder Kontakt mit Kunden, denen wir dann Infomaterialien zuordnen - die müssten ja dann alle einzeln gespeichert werden.

Ich müsste pro durchgeführten Kontakt mehrere Infomaterialien speichern können - und da ist mir bislang nur diese "Zahlenkolonne" im Feld "Infomaterial" eingefallen.

Ich hab mal als Screenshot die Oberfläche für die Kontakterfassung beigefügt, vielleicht kann man sich das dann besser vorstellen.
Miniaturansicht angehängter Grafiken
screenshot.jpg  
Mit Zitat antworten
  #4  
Alt 22.03.2009, 13:52:19
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Mehrfachkriterium in einem Feld

Ok, Ich glaub ich habs verstanden. Aber auch dann ist die Normalisierung der beste Weg. Glaub mir, die IDs als String in einer Spalte verursachen nur Probleme. Wenn nicht jetzt, dann sicher irgendwann in der Zukunft.

Also noch ein Versuch. :D In dieser Tabelle speicherst Du die Beziehung des Kontakts zum Infomaterial:
Code:
CREATE TABLE kontakte_zu_infomaterial (
  kontakt_id int(10) unsigned NOT NULL,
  infomaterial_id int(10) unsigned NOT NULL,
  PRIMARY KEY  (kontakt_id, infomaterial_id)
) ENGINE=MyISAM;
Für jede Infomaterial-ID wird also eine extra Reihe eingetragen:

PHP-Code:
$sql->query("INSERT INTO kontakte (kontakt_id, betriebs_id) VALUES (NULL, "$betriebs_id .")");

$last_kontakt_id mysql_insert_id();

foreach(
$checkbox_infomaterial_array as $val) {

    
$sql->query("INSERT INTO kontakte_zu_infomaterial (kontakt_id, infomaterial_id) VALUES ("$last_kontakt_id .", "$val .")");


Die erste Abfrage besteht ja wahrscheinlich schon. Ich zeig das ganze nur noch einmal um die Interaktion mit mysql_insert_id und der nachfolgenden Tabelle zu erklären.

Mit dieser Abfrage bekommt man dann das gewünschte Ergebniss:
Code:
SELECT i.infomaterial_id
     , i.infomaterialname
     , i.infomaterialbeschreibung
  FROM betriebe AS b
INNER
  JOIN kontakte AS k
    ON k.betriebs_id = b.betriebs_id
INNER
  JOIN kontakte_zu_infomaterial AS ki
    ON ki.kontakt_id = k.kontakt_id
INNER
  JOIN infomaterial AS i
    ON i.infomaterial_id = k.infomaterial_id
 WHERE b.betriebs_id = 123;

Geändert von Crisps (22.03.2009 um 13:53:07 Uhr)
Mit Zitat antworten
  #5  
Alt 22.03.2009, 15:42:22
Michi77 Michi77 ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 5
AW: Mehrfachkriterium in einem Feld

OK, das leuchtet ein. Danke erstmal, Crisps!

Ich muss jetzt versuchen, dass bei mir unterzubekommen. Ich brauch das für ne Seite, die mit TYPO3 erzeugt wurde und da konnte ich PHP bisher fast komplett umgehen :-) Bin nämlich blutiger PHP-Anfänger.

Beste Grüße!

Michael
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Query zum Feld leeren, richtig? Franzx MySQLi/PDO/(MySQL) 4 17.11.2006 09:15:26
Zusätzliches Feld in Feld der Datenausgabe aufnehmen Franzx PHP Grundlagen 16 31.10.2006 10:17:36
Datensätze über Feld (Datentyp time) selektieren engel4u MySQLi/PDO/(MySQL) 2 07.10.2006 15:55:54
brauche Hilfe Feld + 1 erhöhen rmzcreative MySQLi/PDO/(MySQL) 11 31.08.2006 14:57:42
Wert aus DropDown Feld auslesen Jim Panse PHP für Fortgeschrittene und Experten 12 07.04.2003 07:37:55


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:21:13 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt