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 ::

Das Zend Framework

Das Zend Framework 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)

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 23.02.2012, 20:33:17
towbee towbee ist offline
Anfänger
 
Registriert seit: Feb 2012
Alter: 43
Beiträge: 10
SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werden

Hallo,

ich habe 2 Tabellen. In der einen Tabelle stehen Benutzer, die Benutzergruppen (Gruppe 1,2,...) zugeordnet sind. In der zweiten Tabelle stehen mehrere oder keine Einträge zu jedem Benutzer.

Code:
Tabelle Benutzer			Tabelle Listen
________________			______________
	
ID	GRUPPE	UID	NAME		ID	LISTID	UID	EINTRAG
1	1	abc	Peter		1	1	abc	Peter ist groß
2	1	def	Hans		2	1	def	Hans ist reich
3	2	ghi	Karl		3	2	abc	ein Eintrag
4	2	jkl	Hugo		4	2	jkl	ein anderer Eintrag
5	1	mno	Kurt		5	3	jkl	Das ist Text
Nun brauche eich eine Abfrage, die mir auf jeden Fall alle Benutzer einer Gruppe (z.B. 1) ausgibt und wenn vorhanden, auch einen Listeneintrag (z.B Liste 1).
In diesem Fall müsste die Tabelle so ausgegeben werden:

Code:
Gruppe 1 mit Liste 1
____________________
	
ID	GRUPPE	UID	NAME	ID	LISTID	UID	EINTRAG
1	1	abc	Peter	1	1	abc	Peter ist groß
2	1	def	Hans	2	1	def	Hans ist reich
5	1	mno	Kurt
Bei allen meinen bißherigen Versuchen gab meine Abfrage nur die Benutzer aus, die auch einen Listeneintrag hatten.
Ich hoffe, dass mir jemand helfen kann.
Mit Zitat antworten
  #2  
Alt 23.02.2012, 20:59:44
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Hallo und willkommen hier im Forum.


Und wie sehen Deine bisherigen (Miß-)Erfolge aus? Damit meine ich den Code und nicht die verbale Aussage.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 23.02.2012, 21:36:32
towbee towbee ist offline
Anfänger
 
Registriert seit: Feb 2012
Alter: 43
Beiträge: 10
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Naja, ich hab es mit unzähligen unterschiedlichen Varianten ausprobiert. JOIN, UNION, SELECT IF, .... Manchmal mit Fehlern manchmal mit falschen Ergebnissen.
Die Einfachste Variante, die die Tabellen verknüpft hat, war:
Code:
SELECT * 
FROM tbl_benutzer AS a
LEFT JOIN tbl_listen AS b ON a.uid=b.uid
WHERE a.gruppe = 1
AND b.listid = 1
Nur fehlen hier eben alle Benutzer der Gruppe 1!
Wie kann ich diese SQL - Anweisung erweitern / verändern, damit auch die Benutzer ausgegeben werden, die keinen Linsteneintrag in der Liste 1 haben???
Mit Zitat antworten
  #4  
Alt 23.02.2012, 22:21:46
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

PHP-Code:
$sql "SELECT *
        FROM tbl_benutzer as a LEFT JOIN tbl_listen as b ON a.UID = b.UID
        WHERE (a.GRUPPE=1 AND b.LISTID Is Null) OR 
              (a.GRUPPE=1 AND b.LISTID=1)"

__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #5  
Alt 23.02.2012, 22:37:07
towbee towbee ist offline
Anfänger
 
Registriert seit: Feb 2012
Alter: 43
Beiträge: 10
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Danke erst einmal.
Eigentlich gute Idee, aber bei mir gibt es trotzdem nicht alle Benutzer der Gruppe 1 aus, nur die einen Eintrag in der Listen-Tabelle haben :-(! (MySql 5.0.22)
Hinweis: Wenn ich
Code:
SELECT * 
FROM tbl_benutzer as a LEFT JOIN tbl_listen as b ON a.UID = b.UID 
WHERE (a.GRUPPE=1 AND b.LISTID Is Null)
eingebe, kommen gar keine Datansätze. Ich denke, das könnte daran liegen, dass b.UID in manchen fällen gar nicht vorhanden ist. Also der JOIN über a.UID = b.UID liefert nur Ergebnisse wenn b.UID und a.UID vorhanden ist!?!
Noch einen Tipp?
Mit Zitat antworten
  #6  
Alt 23.02.2012, 22:46:58
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Bitte die Tabellenstrukturen als formatierten Text hier ins Forum stellen.
Code:
mysql>SHOW CREATE TABLE tbl_benutzer;
mysql>SHOW CREATE TABLE tbl_listen;
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #7  
Alt 23.02.2012, 23:02:02
towbee towbee ist offline
Anfänger
 
Registriert seit: Feb 2012
Alter: 43
Beiträge: 10
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Code:
CREATE TABLE `user` (
`id` int(10) NOT NULL auto_increment,
`kid` int(6) default NULL,
`uid` varchar(32) NOT NULL default '',
`nn` varchar(100) character set latin1 collate latin1_german1_ci NOT NULL,
`vn` varchar(100) character set latin1 collate latin1_german1_ci NOT NULL,
PRIMARY KEY  (`id`),
UNIQUE KEY `uid` (`uid`)
) ENGINE=MyISAM AUTO_INCREMENT=888 DEFAULT CHARSET=latin1

CREATE TABLE `listen` (
`id` int(10) NOT NULL auto_increment,
`list_id` int(10) NOT NULL default '0',
`kid` int(10) NOT NULL default '0',
`uid` varchar(32) NOT NULL default '',
`txt` varchar(255) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=437 DEFAULT CHARSET=latin1
(Ich weiß, dass die Struktur noch verbessert werden sollte, aber ist noch im Entwicklungsstadium)

Und? Hilft das?
Mit Zitat antworten
  #8  
Alt 23.02.2012, 23:11:07
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Sorry, aber Deine Struktur passt nicht zu Deiner Fragestellung/Deinen Vorgaben.
Bringe die Unterschiede in Übereinstimmung, dann können wir weiter machen.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #9  
Alt 23.02.2012, 23:16:49
towbee towbee ist offline
Anfänger
 
Registriert seit: Feb 2012
Alter: 43
Beiträge: 10
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

Weil die Spalten anders benannt sind?
Wie schaut es mit dem aus?

Code:
CREATE TABLE `tbl_benutzer` (
`ID` int(10) NOT NULL auto_increment,
`GRUPPE` int(6) default NULL,
`UID` varchar(32) NOT NULL default '',
`NAME` varchar(100) character set latin1 collate latin1_german1_ci NOT NULL,
PRIMARY KEY  (`ID`),
UNIQUE KEY `UID` (`UID`)
) ENGINE=MyISAM AUTO_INCREMENT=888 DEFAULT CHARSET=latin1

CREATE TABLE `tbl_listen` (
`ID` int(10) NOT NULL auto_increment,
`LISTID` int(10) NOT NULL default '0',
`UID` varchar(32) NOT NULL default '',
`EINTRAG` varchar(255) default NULL,
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=437 DEFAULT CHARSET=latin1
Ich hoffe, dass es nun einen Sinn gibt!
Mit Zitat antworten
  #10  
Alt 23.02.2012, 23:23:55
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: SQL Join bei dem auf jeden Fall alle Einträge der linken Tabelle ausgegeben werde

PHP-Code:
SELECT *
        
FROM tbl_benutzer as a LEFT JOIN tbl_listen as b ON a.UID b.UID
        WHERE 
(a.GRUPPE=AND b.LISTID Is Null) OR 
              (
a.GRUPPE=AND b.LISTID=1
ergibt:
Code:
ID 	GRUPPE 	UID 	NAME 	ID 	LISTID 	UID 	EINTRAG
888 	1 	abc 	Peter 	437 	1 	abc 	Peter ist groß
889 	1 	def 	Hans 	438 	1 	def 	Hans ist reich
892 	1 	mno 	Kurt 	NULL 	NULL 	NULL 	NULL
Was willst Du mehr - das og. SQL-Statment passt!
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
Antwort

Stichworte
join, mysql


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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
Zwei Werte aus erster Tabelle mit ein Wert aus zweiter Tabelle (LEFT JOIN) verknüpfen horn-consulting MySQLi/PDO/(MySQL) 2 18.11.2011 14:32:40
Brauche Hilfe Partygirl MySQLi/PDO/(MySQL) 10 01.03.2011 09:18:11
Werte aller Einträge der Tabelle ändern Wiesel82 MySQLi/PDO/(MySQL) 9 05.02.2010 13:36:38
SQL update mit JOIN allanon MySQLi/PDO/(MySQL) 3 10.11.2009 07:02:54
(inner join) Bezug einer Tabelle auf sich selbst braindead2000 MySQLi/PDO/(MySQL) 2 13.12.2007 15:08:53


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:54:50 Uhr.


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


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