php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.01.2006, 10:09  
Gast
 
Beiträge: n/a
Standard Select Problem

Moin zusammen.

Habe folgendes Problem und weiss nicht weiter.
DB Struktur:

http://www.jugend.efg-sb.de/sql.jpg

In der Spalte user_id wird immer die id des users stehen, also sooft wie es profilfelder gibt.
profil_typ sind die profilfelder die in einer anderen tabelle aufgeschluesselt sind.
kann also auch eine menge felder geben, momentan sind es 15.
als wert wird spaeter der wert des feldes stehen, also der name zb Max usw.

sprich ich habe zu einem user alle daten in einer tabelle.

nun will ich auf einer seite eine gesamtuebersicht geben und all diese daten ueber alle person anzeigen.

dies habe ich mit einem join geschafft nur leider gibt er mir dann keine personen aus die nciht alle felder ausgefuellt haben.

Code:
select distinct Name.jug_user_profil_user_id as id, Name.jug_user_profil_wert as Name, Vorname.jug_user_profil_wert as Vorname, Geburtsdatum.jug_user_profil_wert as Geburtsdatum, Telefon_Zuhause.jug_user_profil_wert as Telefon_Zuhause, Telefon_Mobil.jug_user_profil_wert as Telefon_Mobil, Telefon_Homezone.jug_user_profil_wert as Telefon_Homezone, Email.jug_user_profil_wert as Email, ICQ.jug_user_profil_wert as ICQ, AIM.jug_user_profil_wert as AIM, YIM.jug_user_profil_wert as YIM, MSN.jug_user_profil_wert as MSN, Homepage.jug_user_profil_wert as Homepage, Strasse.jug_user_profil_wert as Strasse, PLZ.jug_user_profil_wert as PLZ, Ort.jug_user_profil_wert as Ort from jug_user_profil as Name left join jug_user_profil as Vorname on Name.jug_user_profil_user_id = Vorname.jug_user_profil_user_id left join jug_user_profil as Geburtsdatum on Name.jug_user_profil_user_id = Geburtsdatum.jug_user_profil_user_id left join jug_user_profil as Telefon_Zuhause on Name.jug_user_profil_user_id = Telefon_Zuhause.jug_user_profil_user_id left join jug_user_profil as Telefon_Mobil on Name.jug_user_profil_user_id = Telefon_Mobil.jug_user_profil_user_id left join jug_user_profil as Telefon_Homezone on Name.jug_user_profil_user_id = Telefon_Homezone.jug_user_profil_user_id left join jug_user_profil as Email on Name.jug_user_profil_user_id = Email.jug_user_profil_user_id left join jug_user_profil as ICQ on Name.jug_user_profil_user_id = ICQ.jug_user_profil_user_id left join jug_user_profil as AIM on Name.jug_user_profil_user_id = AIM.jug_user_profil_user_id left join jug_user_profil as YIM on Name.jug_user_profil_user_id = YIM.jug_user_profil_user_id left join jug_user_profil as MSN on Name.jug_user_profil_user_id = MSN.jug_user_profil_user_id left join jug_user_profil as Homepage on Name.jug_user_profil_user_id = Homepage.jug_user_profil_user_id left join jug_user_profil as Strasse on Name.jug_user_profil_user_id = Strasse.jug_user_profil_user_id left join jug_user_profil as PLZ on Name.jug_user_profil_user_id = PLZ.jug_user_profil_user_id left join jug_user_profil as Ort on Name.jug_user_profil_user_id = Ort.jug_user_profil_user_id where Name.jug_user_profil_typ=1 and Vorname.jug_user_profil_typ=2 and Geburtsdatum.jug_user_profil_typ=3 and Telefon_Zuhause.jug_user_profil_typ=4 and Telefon_Mobil.jug_user_profil_typ=5 and Telefon_Homezone.jug_user_profil_typ=6 and Email.jug_user_profil_typ=7 and ICQ.jug_user_profil_typ=8 and AIM.jug_user_profil_typ=9 and YIM.jug_user_profil_typ=10 and MSN.jug_user_profil_typ=11 and Homepage.jug_user_profil_typ=12 and Strasse.jug_user_profil_typ=13 and PLZ.jug_user_profil_typ=14 and Ort.jug_user_profil_typ=15
wie kriege ich es hin das mir alle felder geholt werden von allen personen, auch wenn einige felder bei einigen personen nciht gefüllt sind.

mysql läuft in der version 4.0.23

Danke.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.01.2006, 10:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Select Problem

Zitat:
Zitat von schiker
dies habe ich mit einem join geschafft nur leider gibt er mir dann keine personen aus die nciht alle felder ausgefuellt haben.
Dann stimmt wohl deine WHERE-Bedingung nicht.
Ohne SQL-Dump zum Testen, ist es aber schwer zu sagen woran es liegt.
Zergling-new ist offline   Mit Zitat antworten
Alt 16.01.2006, 10:28  
Gast
 
Beiträge: n/a
Standard

meine frage ist halt ob es generell möglich ist solch eine abfrage zu schreiben? oder ist es besser evtl. einen anderen weg zu nehmen.
  Mit Zitat antworten
Alt 16.01.2006, 10:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Kannst du mal den SQL-Befehl formatiert hinschreiben und nochmal sagen, was du mit dem Befehl haben möchtest und welche variablen Suchkriterien in den Befehl einfließen?
Mir ist nicht ganz klar, was du eigentlich möchtest.

Zitat:
nun will ich auf einer seite eine gesamtuebersicht geben und all diese daten ueber alle person anzeigen.
"alle person" heißt "alle personen" oder "eine person"?
Zergling-new ist offline   Mit Zitat antworten
Alt 16.01.2006, 10:37  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

PHP-Code:
SELECT DISTINCT Name.jug_user_profil_user_id AS id,
       
Name.jug_user_profil_wert AS Name,
       
Vorname.jug_user_profil_wert AS Vorname,
       
Geburtsdatum.jug_user_profil_wert AS Geburtsdatum,
       
Telefon_Zuhause.jug_user_profil_wert AS Telefon_Zuhause,
       
Telefon_Mobil.jug_user_profil_wert AS Telefon_Mobil,
       
Telefon_Homezone.jug_user_profil_wert AS Telefon_Homezone,
       
Email.jug_user_profil_wert AS Email,
       
ICQ.jug_user_profil_wert AS ICQ,
       
AIM.jug_user_profil_wert AS AIM,
       
YIM.jug_user_profil_wert AS YIM,
       
MSN.jug_user_profil_wert AS MSN,
       
Homepage.jug_user_profil_wert AS Homepage,
       
Strasse.jug_user_profil_wert AS Strasse,
       
PLZ.jug_user_profil_wert AS PLZ,
       
Ort.jug_user_profil_wert AS Ort
FROM jug_user_profil 
AS Name
LEFT JOIN jug_user_profil 
AS Vorname ON Name.jug_user_profil_user_id Vorname.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Geburtsdatum ON Name.jug_user_profil_user_id Geburtsdatum.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Telefon_Zuhause ON Name.jug_user_profil_user_id Telefon_Zuhause.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Telefon_Mobil ON Name.jug_user_profil_user_id Telefon_Mobil.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Telefon_Homezone ON Name.jug_user_profil_user_id Telefon_Homezone.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Email ON Name.jug_user_profil_user_id Email.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS ICQ ON Name.jug_user_profil_user_id ICQ.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS AIM ON Name.jug_user_profil_user_id AIM.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS YIM ON Name.jug_user_profil_user_id YIM.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS MSN ON Name.jug_user_profil_user_id MSN.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Homepage ON Name.jug_user_profil_user_id Homepage.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Strasse ON Name.jug_user_profil_user_id Strasse.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS PLZ ON Name.jug_user_profil_user_id PLZ.jug_user_profil_user_id
LEFT JOIN jug_user_profil 
AS Ort ON Name.jug_user_profil_user_id Ort.jug_user_profil_user_id
WHERE Name
.jug_user_profil_typ =1
AND Vorname.jug_user_profil_typ =2
AND Geburtsdatum.jug_user_profil_typ =3
AND Telefon_Zuhause.jug_user_profil_typ =4
AND Telefon_Mobil.jug_user_profil_typ =5
AND Telefon_Homezone.jug_user_profil_typ =6
AND Email.jug_user_profil_typ =7
AND ICQ.jug_user_profil_typ =8
AND AIM.jug_user_profil_typ =9
AND YIM.jug_user_profil_typ =10
AND MSN.jug_user_profil_typ =11
AND Homepage.jug_user_profil_typ =12
AND Strasse.jug_user_profil_typ =13
AND PLZ.jug_user_profil_typ =14
AND Ort.jug_user_profil_typ =15
LIMIT 0 
30 
genug formatiert?

und @schiker Homepage bedeutet nicht das gleiche wie Website siehe: Wikipedia - Hompage
__________________
Wie man Fragen richtig stellt
dsmcg ist offline   Mit Zitat antworten
Alt 16.01.2006, 10:57  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht versuchst du mal dein DB-Design zu erklären. Soll das so etwas wie die 5. Normalform sein? Und dann machst du 14 Self-Joins. Warum machst du nicht eine normale Personen-Tabelle, in der für die entsprechenden Daten jeweils ein Attribut steht? Es ist doch egal, wenn da einige Felder leer bleiben. Da brauchst du keinen einzigen Join und keine WHERE-Bedingung.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 16.01.2006, 11:05  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Häh ich kapier nicht, was der SQL-Befehl soll. Ich würde sagen dein SQL-Befehl ist absoluter Schrott.
Würde ein
SELECT * FROM jug_user_profil WHERE jug_user_profil_user_id = $id AND jug_user_profil_typ BETWEEN 1 AND 15 LIMIT 0, 30
nicht ausreichen?
Wobei die User-ID ja wohl eindeutig sein sollte, und der user_profil_typ, tja was ist das eigentlich?
Warum benennst du deine Spalten auch nach der Tabelle?

Sorry das ist echt ganz ganz großer Mist dein Tabellen-Layout.
Zergling-new ist offline   Mit Zitat antworten
Alt 16.01.2006, 11:06  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

nur so nebenbei, der Code ist ned von mir :P hab nur den Code oben strukturiert
__________________
Wie man Fragen richtig stellt
dsmcg ist offline   Mit Zitat antworten
Alt 16.01.2006, 11:37  
Gast
 
Beiträge: n/a
Standard

dasok dann nochmal von vorne.

ich habe zwei tabellen die dieses problem betreffen.
einmal die jug_user_profil und einmal die jug_user_profil_typ

die jug_user_profil enthält alle daten, die jug_user_profil_typ enthält die möglichen profilfelder.

in der tabelle jug_user_profil_typ steht nur:
1--->name
2--->vorname usw, also zu den nummern die bezeichnung.

die struktur der tabelle jug_user_profil habt ihr ja oben als bild.

dies habe ich so gemacht weil die profilfelder variabel sein sollen. man soll immer felder hinzufügen können.

nehmen wir mal an das es in meinem system 20 user gibt.
für jeden user gibt es informationen in den profilfeldern. aber nicht jeder user hat alle profilfelder ausgefüllt.

auf einer seite will ich eine übersicht alles user mit allen profilfeldern haben.

also jeder juser soll auftauchen und dazu alle profilfelder ob sie nun leer sind oder nicht.
dies soll dann eine liste ergeben.

ich dachte mir das es am besten wäre wenn die abfrage bereits das richtige format aufweist.--> user_id, name, vorname, email usw und das halt für alle user damit ich da einfach mit einer while drübergehen kann und eine ausgabe machen kann.

was der untershied zwischen homepage und website ist, ist mir bekannt. nur ist der begriff homepage nunman verbreitet und auch den anfängern bekannt.
  Mit Zitat antworten
Alt 16.01.2006, 12:55  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich habe schon verstanden, was du willst. Allerdings halte ich eine normale Tabelle in diesem Fall immer noch für besser, die ist ja schliesslich auch erweiterbar.
Aber wenn du unbedingt bei deiner Struktur bleiben willst, und nicht zwingend alle Felder(Typen) ausgefüllt sein müssen, dann musst du das Problem wohl
anders anpacken, mit einer Abfrage allein wirst du das kaum auf die Reihe bringen. Schau mal, ob der folgende Ansatz etwa deinen Anforderungen enrtspricht:
PHP-Code:
$sql "SELECT a.jug_user_profil_user_id id, a.jug_user_profil_wert inhalt, b.bezeichnung
        FROM jug_user_profil a
        INNER JOIN jug_user_profil_typ b ON a.jug_user_profil_typ = b.typ
        ORDER by a.jug_user_profil_user_id, a.jug_user_profil_typ"
;
$res mysql_query($sql) or die("Fehler " mysql_error() . "
Query: $sql
"
);
$a_id 0;
while(
$obj mysql_fetch_object($res)){
    if(
$obj->id != $a_id && $a_id != 0){
        echo 
"<hr/>";
        
$a_id $obj->id;
    }
    echo 
"$obj->bezeichnung: $obj->inhalt
"
;

__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
schleifen problem amsele1986 PHP Tipps 2008 3 21.06.2008 17:45
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
Problem mit SELECT IF r-ene Datenbanken 2 07.02.2008 10:22
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
SELECT AS geht bei AVG net cyberholic Datenbanken 0 04.05.2006 09:43
Mysql SELECT Abfrage -- Problem mit LIMIT djrace Datenbanken 2 01.05.2006 12:58
Problem beim Auswerten eines select Feldes FireFIghter PHP Tipps 2006 3 23.04.2006 15:28
SELECT problem Fatal Error PHP Tipps 2006 5 21.04.2006 16:31
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
Problem mit select (AND, OR und Like gemixt) pixelcut Datenbanken 3 11.05.2005 10:14
[Erledigt] SELECT Problem PHP Tipps 2005 6 08.03.2005 21:10
[Erledigt] SELECT ... LIKE Problem Datenbanken 10 05.03.2005 13:21
mysql SELECT problem yoshy Datenbanken 7 20.02.2005 00:46
[Erledigt] Select &amp;amp;amp; Update Syntax Problem! Datenbanken 3 14.12.2004 18:17


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:46 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.