php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-02-2012, 16:41
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard Kategorien als kommaseparierte Liste

Hallo zusammen,

ich stehe gerade ein wenig auf dem Schlauch. Ich habe mehrere Datensätze in
einer Tabelle stehen. Jeder Datensatz kann mehrere Kategorien haben, diese werden als kommaseparierte Liste (die ID's der Kategorien) in einer Spalte abgelegt.

Ich hatte nun versucht das ganze mit
PHP-Code:
$kat '3';
WHERE spaltenname IN('.$kat.'
auszulesen. Es werden aber nur die datensätze ausgegeben, in denen nur 3 steht, nicht aber die in denen 2,3 oder 1,3 steht.

Was mach ich falsch?
Mit Zitat antworten
  #2 (permalink)  
Alt 08-02-2012, 16:43
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.721
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Poste doch mal den kompletten Query. Und zwar als Ausgabe mit echo.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 08-02-2012, 16:51
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
SELECT FROM stamdaten WHERE vertriebszulassung IN(3
Mit Zitat antworten
  #4 (permalink)  
Alt 08-02-2012, 17:00
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.721
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Niimm FIND_IN_SET.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 08-02-2012, 17:10
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Herzlich Danke!
PHP-Code:

SELECT 
FROM stamdaten WHERE FIND_IN_SET('.$kat.',vertriebszulassung); 
Mit Zitat antworten
  #6 (permalink)  
Alt 08-02-2012, 17:22
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Kommaseparierte Werte in der Datenbank sind ein Designfehler, der korrigiert gehört. Mit FIND_IN_SET() funktioniert es zwar scheinbar erstmal, aber weitere Probleme sind praktisch vorprogrammiert. Und je länger man den Fehler mitzieht, umso aufwändiger wird später die Korrektur.
Mit Zitat antworten
  #7 (permalink)  
Alt 08-02-2012, 22:04
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo h3ll,

mir kam vorhin noch die Idee die Kategorisierung komplett in eine separate Tabelle auszulagern.

PHP-Code:
local_id|foreign_id
  123        1
  123        2
  124        1
  125        1
  125        2
  125        3 

Die Frage ist, on der "Datenbank-Designer" das so leisten kann. Ich bin nur derjenige der auslesen darf und Empfehlungen gibt.

Welche Probleme könnten auftreten mit FIND_IN_SET()? Was wäre Dein Vorschlag? Die Zahl der Kategorien sowie der zugeordneten Datensätze (max 100) ist sehr überschaubar und wird auch nicht übermäßig zunehmen.
Mit Zitat antworten
  #8 (permalink)  
Alt 08-02-2012, 22:27
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Die separate Tabelle ist eine gute Idee und ist auch allgemein so üblich.

Mit FIND_IN_SET() kann man keine vernünftigen Joins machen.
Mit Zitat antworten
  #9 (permalink)  
Alt 08-02-2012, 22:48
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dann schauen wir mal, was der "DB-Designer" leisten kann.
Mit Zitat antworten
  #10 (permalink)  
Alt 09-02-2012, 09:19
chorn
 Registrierter Benutzer
Links : Onlinestatus : chorn ist offline
Registriert seit: Nov 2011
Beiträge: 124
chorn befindet sich auf einem aufstrebenden Ast
Standard

Meinst du mit "DB-Designer" einen Menschen oder ein Programm? Beide sollten wenigstens die ersten drei Normalformen kennen.
Mit Zitat antworten
  #11 (permalink)  
Alt 09-02-2012, 10:32
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke ich formuliere meine Aussage neu:

"Dann schauen wir mal, was der "DB-Designer" zu leisten bereit ist."
Mit Zitat antworten
  #12 (permalink)  
Alt 10-02-2012, 16:05
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard ... und jetzt die separate Tabelle richtig auslesen

Ich steh schon wieder auf dem Schlauch, jetzt hab ich die separate Tabelle erstellt und bekomm es nicht hin diese richtig auszulesen. Folgendermaße sieht diese aus:
PHP-Code:
local_id|foreign_id
  123        1
  123        2
  123        18
  123        9

  105        1
  105        3 
In foreign_id stehen also die unterschiedlichen Kategorien, denen die ID's der Datensätze in local_id zugeordnet sind. Ich hab folgendes probiert:
PHP-Code:
$wert1 1;
$wert2 18
mysql_query
(SELECT local_id FROM tabelle_kategorien WHERE foreign_id IN($wert1,$wert2)); 
Hier hab ich zwar eine Ausgabe, die ist jedoch falsch, da die ID 123 UND 105 ausgeben wird. Ich brauch aber nur die
Datensätze bei denen beiden Werte ($wert1,$wert2) in foreign_id übereinstimmen. Ein AND also.

Folgende Abfrage gibt garnichts aus:
PHP-Code:
mysql_query(SELECT local_id FROM tabelle_kategorien WHERE 
                            foreign_id 
$wert1 AND foreign_id  $wert2); 

Geändert von gruenspan (10-02-2012 um 16:07 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 10-02-2012, 16:15
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

foreign_id und local_id sind komplett sinnlose Namen. Wie soll da jemand verstehen, auf welche ID da verwiesen wird?

Das selbe gilt für die Variablennamen $wert1 und $wert2.

Außerdem solltest du PHP vorerst komplett weglassen und erstmal nur in MySQL üben.
Mit Zitat antworten
  #14 (permalink)  
Alt 10-02-2012, 16:39
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Spaltennamen sind im Original andere (uid_fonds, uid_kat), ich wollte nur Dummy-Namen. Auch wert1 und wert2 sind nur Platzhalter gewesen, na egal.

Hast Du einen Tipp oder ein Stichwort wie ich ansetzen könnte?
Mit Zitat antworten
  #15 (permalink)  
Alt 10-02-2012, 22:13
gruenspan
 Registrierter Benutzer
Links : Onlinestatus : gruenspan ist offline
Registriert seit: Oct 2005
Beiträge: 470
gruenspan ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Selber gefunden:Fortgeschrittene Jointechniken: Der Selfjoin
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Daten aus 2 Tabellen als Liste zerni SQL / Datenbanken 1 08-11-2007 16:32
Problem mit MySQL Ausgabe als Liste AnnaFan Archiv / Trash 68 10-12-2004 13:46
ergebnis als liste anzeigen lassen bastian PHP Developer Forum 2 02-04-2003 12:38
Namensfeld als Dropdown-Liste Larsidotnet SQL / Datenbanken 2 04-11-2001 11:23
Kategorien als Hyperlinkliste ausgeben juf PHP Developer Forum 2 03-05-2001 19:01

Themen-Optionen
Thema bewerten
Thema bewerten:

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.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:26 Uhr.