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 13-03-2008, 09:52
elf7013
 Registrierter Benutzer
Links : Onlinestatus : elf7013 ist offline
Registriert seit: Nov 2005
Beiträge: 104
elf7013 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem bei JOIN Abfrage

Folgende Abfrage liefert keine Ergebnisse

mysql_query("select * from Fragebogen_Veranstaltung LEFT JOIN Veranstaltung where Fragebogen_Veranstaltung.Veranstaltung_ID = Veranstaltung.Veranstaltung_ID AND Veranstaltung.Kurs_ID = '$Kurs'");

An dieser Stelle brauche ich ausnahmsweise nicht das Kartesiche Produkt beider Tabellen sondern ausschliesslich die Verknüpfung der Tabelle Fragebogen_Veranstaltung mit der Tabelle Veranstaltung.

Wo mache ich einen Fehler?
Mit Zitat antworten
  #2 (permalink)  
Alt 13-03-2008, 09:58
elf7013
 Registrierter Benutzer
Links : Onlinestatus : elf7013 ist offline
Registriert seit: Nov 2005
Beiträge: 104
elf7013 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Problem im Syntax gefunden:

mysql_query("select * from Fragebogen_Veranstaltung LEFT JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");


Leider scheint der Left Join nicht richtig zu sein...
Mit Zitat antworten
  #3 (permalink)  
Alt 13-03-2008, 09:59
case
 Registrierter Benutzer
Links : Onlinestatus : case ist offline
Registriert seit: Mar 2007
Beiträge: 265
case ist zur Zeit noch ein unbeschriebenes Blatt
case eine Nachricht über ICQ schicken
Standard

also so ganz verstehe ich dein Problem nicht aber wenn du nur die Datensätze brauchst, die eine Verknüpfung mit der Tabelle Veranstaltung haben, so nutze ein INNER JOIN..... falls das ist, was du willst
Mit Zitat antworten
  #4 (permalink)  
Alt 13-03-2008, 10:18
elf7013
 Registrierter Benutzer
Links : Onlinestatus : elf7013 ist offline
Registriert seit: Nov 2005
Beiträge: 104
elf7013 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Problem ist von mir auch schlecht beschrieben...

Also ich habe Fragebogen zu Veranstaltungen erhoben und diese in der Tabelle Fragebogen_Veranstaltung abgelegt.

Fragebogen_Veranstaltung
{
Studierende_ID (primär)
Veranstaltung_ID (primär)
...
}

Da es mehrere Veranstaltungen gibt, sind entsprechende Werte in der Tabelle Veranstaltung abgelegt:

Veranstaltung
{
Veranstaltung_ID (primär)
Prof_ID (primär)
Kurs_ID
...
}

Bisher war es so, dass Veranstaltungen nur von einem Prof gehalten wurden, dieses wurde in einem Kurs mehrere Veranstaltungen aufgehoben.

Insgesamt wurden diese Veranstaltungen von 54 Personen evaluiert.

Durch die alte Abfrage:
$result = mysql_query("select * from Fragebogen_Veranstaltung INNER JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");

erhalte ich aber 108gezählte Ergebnisse (was auch dem JOIN entspricht).

Eigentlich brauche ich aber jeden Fragebogen nur einmal egal ob es nun von Prof A oder B gehalten wurde.



Mmmh ich glaube die Beschreibung ist noch nicht viel besser
Mit Zitat antworten
  #5 (permalink)  
Alt 13-03-2008, 10:22
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

GROUP BY Veranstaltung.Kurs_ID
müsste helfen
Mit Zitat antworten
  #6 (permalink)  
Alt 13-03-2008, 10:25
case
 Registrierter Benutzer
Links : Onlinestatus : case ist offline
Registriert seit: Mar 2007
Beiträge: 265
case ist zur Zeit noch ein unbeschriebenes Blatt
case eine Nachricht über ICQ schicken
Standard

Eine Vernünftige Datenbankstruktur würde dein Problem Lösen.

Du musst einfach die Professor-id aus der Tabelle Veranstaltung rausnehmen. So hast du eine Veranstaltungs-id auch nur genau ein mal in der Tabelle Veranstaltung stehen.

Dann machst du eine Kreuztabelle professor_veranstaltung, wo nur 2 Primarykeys, professor_id und veranstaltung_id drin stehen.

So steht die Veranstaltung nur noch einmal in der Tabelle und du erhältst die Datensätze die du brauchst.

Außerdem könntest du die Studentennamen mit einem SELECT DISTINCT nur einmalig herausfinden, wobei die Datenbankstruktur dann immer noch unsauber ist.
Mit Zitat antworten
  #7 (permalink)  
Alt 13-03-2008, 10:25
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

SELECT * FROM mit einer Tabelle ist schon schlecht mit JOINS wirds zur Katastrophe. Ausserdem erschwert es die Hilfestellung, wweil wir dann die Tabellenstruktur nicht kennen.
Aber wenn du uns beschreibst, was für Daten du haben willst und wie deine Tabellen sonst noch aussehen , dann können wir dir vielleicht weiter helfen.
__________________
Gruss
H2O
Mit Zitat antworten
  #8 (permalink)  
Alt 13-03-2008, 10:29
elf7013
 Registrierter Benutzer
Links : Onlinestatus : elf7013 ist offline
Registriert seit: Nov 2005
Beiträge: 104
elf7013 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich glaube folgende Beschreibung trifft es:

Die Lösung des Problems besteht aus zwei Schritten:

1. Ich brauche alle Veranstaltung_ID (und zwar nur einmal!) der Tabelle Veranstaltung abhängig von der Kurs_ID:
SELECT DISTINCT * FROM Veranstaltung_ID WHERE Kurs_ID=22;

2. Danach brauche ich alle ausgefüllten Fragebögen zu den gerade ermittelten Veranstaltung_ID.

Also die Lösung meines Problems wäre ein JOIN auf dem DISTINCT Ergebnis
der Veranstaltung Tabelle.



Leider kenne ich mich mit verschachtelten Anfragen nicht und weiss nicht ob dies zum Ziel führt?
Mit Zitat antworten
  #9 (permalink)  
Alt 13-03-2008, 10:31
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dann lesen: JOINS - das leidige Thema (mehrere Tabellen abfragen) und entsprechend anpassen.
Mit Zitat antworten
  #10 (permalink)  
Alt 13-03-2008, 10:32
elf7013
 Registrierter Benutzer
Links : Onlinestatus : elf7013 ist offline
Registriert seit: Nov 2005
Beiträge: 104
elf7013 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von asp2php
Dann lesen: JOINS - das leidige Thema (mehrere Tabellen abfragen) und entsprechend anpassen.
Dies las ich bereits, bin ich aber nicht mit zurecht gekommen.

So nachdem ich nicht weiterkam, habe ich stumpf folgendes probiert:
mysql_query("select distinct Fragebogen_Veranstaltung.* from Fragebogen_Veranstaltung INNER JOIN Veranstaltung USING (Veranstaltung_ID) where Veranstaltung.Kurs_ID = '$Kurs'");

und dies führt zum gewünschten Ergebnis.


Vielen Dank für alle Hinweise.

Geändert von elf7013 (13-03-2008 um 10:48 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


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

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 01:14 Uhr.