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 Bewertung: Bewertung: 3 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 14-06-2006, 19:03
Michi1g
 Newbie
Links : Onlinestatus : Michi1g ist offline
Registriert seit: Jan 2004
Ort: Deutschland
Beiträge: 32
Michi1g ist zur Zeit noch ein unbeschriebenes Blatt
Standard Abfrage aus 2 Tabellen liefert zu viele Ergebnisse

Hi!
Ich habe folgendes Problem: Ich will

- aus der einen Tabelle alle Daten auslesen:

CREATE TABLE `termine` (
`termine_id` int(11) NOT NULL,
`termine_what` text NOT NULL,
`termine_date` datetime NOT NULL,
`termine_where` varchar(100) NOT NULL,
`termine_who` varchar(100) NOT NULL,
PRIMARY KEY (`termine_id`)
) TYPE=MyISAM AUTO_INCREMENT

-und aus der anderen Tabelle nur 2 Spalten (user und termin), wobei die spalte user_termine_termin die termine_id enthält

CREATE TABLE `user_termine` (
`user_termine_id` int(11) NOT NULL,
`user_termine_user` varchar(15) NOT NULL,
`user_termine_termin` int(11) NOT NULL,
`user_termine_angemeldet` text NOT NULL,
`user_termine_erstellt` text NOT NULL,
PRIMARY KEY (`user_termine_id`)
) TYPE=MyISAM AUTO_INCREMENT

Dienen soll das ganze dazu, einen Button nur dann anzuzeigen, wenn der angemeldete user sich noch nicht für den Termin angemeldet hat.
Alle Versuche meinerseits sind leider gescheitert, da ich entweder dür jeden angemeldeten User einen Datensatz zurückbekomme oder aber halt nur die Termine angezeigt bekommen bei denen sich bereits User angemeldet haben.
So siehts momentan aus:
PHP-Code:
$query "SELECT * FROM `termine` as A, `user_termine` as B WHERE `termine_date` >= NOW() ORDER BY `termine_date` ASC LIMIT 0 , 30"
$data mysql_query($query) or die (mysql_error()); 
while(
$row mysql_fetch_array($data)) {...} 
Für eure Hilfe wäre ich echt dankbar. Sollte was nicht verständlich sein, versuch ichs gern nochmal zu erklären.


Mfg

Michi
__________________
DAS Forum für PHP & ähnliches
Mit Zitat antworten
  #2 (permalink)  
Alt 14-06-2006, 19:11
mai
 Junior Member
Links : Onlinestatus : mai ist offline
Registriert seit: Jun 2006
Beiträge: 98
mai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

diejenigen zu finden, die noch keinen Termin haben, geht mit einem left join. Suche folgendes Beispiel im mysql-Manual und passe es an.

Beachte noch , dass die Syntax IS NULL heisst und nicht = NULL.

PHP-Code:
SELECT table1.* FROM table1
  LEFT JOIN table2 ON table1
.id=table2.id
  WHERE table2
.id IS NULL

Geändert von mai (14-06-2006 um 19:13 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 14-06-2006, 21:43
Michi1g
 Newbie
Links : Onlinestatus : Michi1g ist offline
Registriert seit: Jan 2004
Ort: Deutschland
Beiträge: 32
Michi1g ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke dir, aber ich will ja nicht wissen wer noch keinen Termin hat, sondern ich will alle Termine anzeigen lassen. Nur dann will ich noch wissen ob der angemeldete user sich bei diesem termin schon angemeldet hat.
__________________
DAS Forum für PHP & ähnliches
Mit Zitat antworten
  #4 (permalink)  
Alt 14-06-2006, 23:37
mai
 Junior Member
Links : Onlinestatus : mai ist offline
Registriert seit: Jun 2006
Beiträge: 98
mai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also da du keine separate user-tabelle hast, könnte es mit der folgenden
Horrorkonstruktion gehen (GROUP statt dessen):

PHP-Code:
select a.user_termine_user as a_user
      
b.*, 
      
c.*, 
      (
c.user_termine_termin IS NOT NULL) as ist_angemeldet
   from user_termine a
termine b,
     
left join user_termine c on 
          
(b.termine_id c.user_termine_termin
        
and a.user_termine_user=c.user_termine_user)
  
where b.termine_date >= NOW() 
  
GROUP by a_user
  ORDER BY b
.termine_date ASC LIMIT 0 30
Das c.* kannst Du bei Desinteresse weglassen.

Als Alternative taucht mir auf, alle users mit einer subquery im FROM herauszuziehen:
PHP-Code:
... from (select distinct user_termine_user from user_terminea... 
*vg*
Mit Zitat antworten
  #5 (permalink)  
Alt 15-06-2006, 00:07
Michi1g
 Newbie
Links : Onlinestatus : Michi1g ist offline
Registriert seit: Jan 2004
Ort: Deutschland
Beiträge: 32
Michi1g ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi!

Irgendwie blick ich da bei dir nicht so durch. Bin leider noch ein rechter Newbie was MySQL anfragen angeht.
Ich hab meine Anfrage mittlerweile so weit:
PHP-Code:
SELECT A.* , B.user_termine_terminB.user_termine_user 
FROM termine 
AS 
LEFT JOIN user_termine 
AS B ON A.termine_id B.user_termine_termin 
WHERE B
.user_termine_user '$_SESSION['user']'  LIMIT 0 30 
Als ausgabe bekomme ich mittlerweile halt nur noch die Termine, für die sich der user auch registriert hat.
Was ich genau bräuchte wäre eine Abfrage, die mir komplett die Daten aus der Tabelle termine ausgibt und dazu noch aus der Tabelle user_termine.
Und zwar genau dann, wenn termine_id = user_termine_termin. Ansonsten sollte er die Felder einfach als NULL zurückgeben.
__________________
DAS Forum für PHP & ähnliches
Mit Zitat antworten
  #6 (permalink)  
Alt 15-06-2006, 00:13
mai
 Junior Member
Links : Onlinestatus : mai ist offline
Registriert seit: Jun 2006
Beiträge: 98
mai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also, du willst für einen bestimmten user '$_SESSION['user']' alle möglichen Termine
haben, zusammen mit einer Angabe für jeden Termin ob er sich schon angemeldet
hat oder nicht? Das ist einfach, wenn es nur um das geht.

Im ersten post hast Du keine Bedingung auf einen bestimmten user, jetzt ist diese
plötzlich aufgetaucht.......dafür ist die now() Bedingung entfallen. Zwischendruch
wolltest Du etwas für die angemeldeten users. Was gilt ?

Und machst Du zufällig ein Durcheinander zwischen angemeldet im Sinn von
logged-in und angemeldet im Sinne von für den Prüfungs-/Arztermin angemeldet?
Mit Zitat antworten
  #7 (permalink)  
Alt 15-06-2006, 00:32
mai
 Junior Member
Links : Onlinestatus : mai ist offline
Registriert seit: Jun 2006
Beiträge: 98
mai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielleicht sowas?
PHP-Code:
$sql="SELECT A.* , B.user_termine_termin, B.user_termine_user 
FROM termine AS A 
LEFT JOIN user_termine AS B ON (A.termine_id = B.user_termine_termin 
   A N D    B.user_termine_user = '{$_SESSION['user']}' ) LIMIT 0 , 30"

Mit Zitat antworten
  #8 (permalink)  
Alt 15-06-2006, 00:44
Michi1g
 Newbie
Links : Onlinestatus : Michi1g ist offline
Registriert seit: Jan 2004
Ort: Deutschland
Beiträge: 32
Michi1g ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, wenns n bisschen kompliziert war... Aber das letzte passt optimal! Kannst du mir des mit dem ON mal erklären? Des Blick i no net ganz.
__________________
DAS Forum für PHP & ähnliches
Mit Zitat antworten
  #9 (permalink)  
Alt 16-06-2006, 12:52
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

"on" zeigt bei standart-sql verbund von tabellen.

on tabellenname1.feldname=tabellenname2.feld

bei mehreren datenbanksystemen kann man auf "on" verzichten und verbund von tabellen in "where" zuschreiben.

"on" ist aber übersichtlich, da man genau weist, dass es in dieser Teil um Verbund von tabellen handelt und hält zusätzliche Abfragebedingungen davon getrennt.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #10 (permalink)  
Alt 16-06-2006, 12:55
Michi1g
 Newbie
Links : Onlinestatus : Michi1g ist offline
Registriert seit: Jan 2004
Ort: Deutschland
Beiträge: 32
Michi1g ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich glaub jetzt hab ichs...
Thx a lot

michi
__________________
DAS Forum für PHP & ähnliches
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

zechat ansehen zechat

Willst du Chat-Admin in deinem eigenen kostenlosen Chat mit vielen Funktionen sein, und soll der Chat dazu noch schnell und stabil auf alles Webservern sein? Wenn ja, ist deine Suche jetzt vorbei!

07.06.2018 Manuel1986 | Kategorie: AJAX/ Chat
bootstrapzero

kostenlose Bootstrap-Themes

05.06.2018 Berni | Kategorie: HTML5/ CSS-Responsive
Entwicklung einer Chat-Webanwendung mit Node.js

Einfacher Chat mit Node.js

26.05.2018 Berni | Kategorie: Node.js/ nodejs-Tutorials
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:34 Uhr.