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 18-04-2008, 15:39
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard 2 Tabellen verbinden - logisches Problem

Hiho zusammen,

Zur Zeit programmiere ich ein kleines Projekt, was es Usern ermöglicht Interessengruppen anzulegen in die andere Eintreten können.

Soweit steht alles, ich habe nur 1 Problem:

Wenn man nach einer Gruppe sucht, soll schon bei der Anzeige der Gruppe dabei stehen, ob man dieser Gruppe bereits angehört (Usability )

Tabelle 1 enthält:
id (Gruppenid)
uid (Besitzer-Id)
und halt beschreibung etc

Tabelle 2 enthält die User und die Gruppe der sie angehören:
id (Eintrag Id),
gid (Gruppen Id),
uid (nutzer)

"
SELECT groups.id,groups.name,groups.note,groupuser.uid FROM groups
WHERE name like '%".$_POST["string"] . "%'
OR note like '%".$_POST["string"] . "%'
" - Ohne Gruppenzugehörigkeit

Ich komme wirklich nicht drauf, wie man die beiden Tabellen so verbinden kann, dass man die Suche nach der Gruppe mit dem Inhalt "string" mit der Überprüfung der Gruppenzugehörigkeit in eine SQL Abfrage packen kann.

Ich könnte das Problem mit einer zweiten SQL abfrage lösen, die Prüft ob der User der Gruppe angehört, aber bei 10 Gruppen hieße das 10 SQL Abfragen pro Seitenaufbau, das erscheint mir zuviel zu sein.

Sollte jemand eine Idee7Anregung haben, wäre ich sehr dankbar.

Ja, ich kenen JOIN's, aber ich kome grad ganz einfach auf keine Sinnvolle verknüpfung-.

Grüße
Dennis

Geändert von norodon (18-04-2008 um 15:48 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-04-2008, 16:00
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich vermute, du suchst das:
Code:
SELECT 
	g.id,
	g.name,
	g.note,
	u.uid 
FROM 
	groups g
INNER JOIN 
	groupuser u ON g.id = u.gid
WHERE 
	g.name = '" $_POST['string'] . "'"
AND
	u.uid = $userid;
Wenn etwas gefunden wird, gehört der Benutzer (woher du die $userid nimmst, musst du selber wissen) der Gruppe an, sonst nicht.
__________________
Gruss
H2O
Mit Zitat antworten
  #3 (permalink)  
Alt 18-04-2008, 16:02
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

Hallo,

Ich würde dir einen Left-Join empfehlen.

Code:
SELECT DISTINCT G.id, G.name, G.note, GU.gid 
FROM groups AS G
LEFT OUTER JOIN groupuser AS GU ON G.id = GU.gid 
WHERE name like '%".$_POST["string"] . "%'
  OR note like '%".$_POST["string"] . "%'
So, nun kannst du in php mit is_null überprüfen, ob GU.gid null ist oder nicht. Ist es NULL so ist er noch nicht in der Gruppe, ansonsten schon..



EDIT:
@H2O: Ich glaube er will die Gruppe auch haben, wenn der user nicht drin ist..
Mit Zitat antworten
  #4 (permalink)  
Alt 18-04-2008, 16:14
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke an Beide für ihre Antworten

@Case

Dein Ansatz war genau das was ich gesucht habe.

"SELECT DISTINCT " und "X as X" kenne ich nicht, werde ich mir aber gleich mal ansehen.


Danke vielmals ^^
Mit Zitat antworten
  #5 (permalink)  
Alt 18-04-2008, 16:26
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Aber auf den user musst du trotzdem abfragen, sonst ist di GU.gid nicht null, sobald irgendein Benutzer in der Gruppe ist.
__________________
Gruss
H2O
Mit Zitat antworten
  #6 (permalink)  
Alt 18-04-2008, 19:06
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Eine Person ist immer in der Gruppe, der Gründer nämlich.

So, habe jetzt mal ein wenig damit rummgespielt und das Problem ist, dass er manche Gruppen doppelt ausgibt, sobald mehrer Leute drinne sind.




id name note gid uid owner
19 TEST TEST 19 17 0
19 TEST TEST 19 18 1


Gibt es da eine elegante Methode das zu ändern?

--- Edit: ---

Das Problem liegt natürlich am Feld "owner" und "uid", SQL dieses nicht ohne Datenverlust zusammenführen kann, evtl muss ich das Rausnehmen und es anders lösen


Geändert von norodon (18-04-2008 um 20:06 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 18-04-2008, 21:54
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

wie schaut dein Query denn mittlerweile aus?

die uid brauchst du doch eigentlich nicht oder? nimm die mal raus und dann sollten mit einem Distinct alle Datensätze nur noch einmal ausgegeben werden..
Mit Zitat antworten
  #8 (permalink)  
Alt 18-04-2008, 22:10
norodon
 Registrierter Benutzer
Links : Onlinestatus : norodon ist offline
Registriert seit: Apr 2008
Beiträge: 55
norodon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
$query="SELECT DISTINCT groups.id,groups.uid, groups.name, groups.note, groupuser.gid  
FROM groups AS groups  
LEFT OUTER JOIN groupuser AS groupuser 
ON groups.id = groupuser.gid   
WHERE name like '%" 
$_POST["string"] . "%' OR note LIKE '%" $_POST["string"] . "%'" 
Zur Zeit ist der Aufruf nicht sehr sinnvoll für mich, da ich nicht schauen kann ob ein User der Besitzer oder ein Mitglied oder nichts von beidem ist.

Die Gruppen.UID brauche ich, um zu schauen ob es der Besitzer ist und die GruppenUser.UID brauche ich um zu schauen, ob der Benutzer bereits in der Gruppe ist.

Überlege, wie ich evtl auch die Tabellen ändern könnte, wenns nicht anders geht.


Geändert von norodon (18-04-2008 um 23:00 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 21-04-2008, 11:18
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
$query "
    SELECT DISTINCT 
        g.id,
        g.uid, 
        g.name, 
        g.note, 
        IFNULL(u.gid, 0) member,
        IF(g.uid = $user, 1, 0) owner
FROM 
    groups AS g
LEFT OUTER JOIN 
    groupuser u ON g.id = u.gid   
WHERE 
    name like '%" 
$_POST["string"] . "%' 
OR 
    note LIKE '%" 
$_POST["string"] . "%'"
__________________
Gruss
H2O
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 12:29 Uhr.