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 07-01-2013, 07:06
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard NutzerID gruppieren bei 2 Spalten?

hi!
normalerweise kann man ja per group werte zusammenfassen.

jetzt habe ich aber eine gruppen tabelle:

Spalte "GruppenID"
Spalte "Besitzer"
Spalte "Gast"

jetzt habe ich zum test 2 datensätze

der erste:

23 345 879
89 879 345

das bedeutet einmal ist nutzer 1 der besitzer und er hat einen gast mit der nummer 879

und in der 2. gruppe ist dafür 879 der besitzer und der 1. nutzer ist diesesmal gast in einer anderen gruppe.

jetzt habe ich bei der ausgabe (eine art übersicht) den nutzer 879 2x und den nutzer 345 auch 2x.

kann man es so zusammenfassén, das beide spalten von sql geprüft werden und dort die doppelten werte im ergebnis raus genommen werden?

Geändert von Gamer20 (07-01-2013 um 11:53 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 07-01-2013, 13:21
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

versuch mal sowas wie
Code:
GROUP BY CONCAT_WS('-', LEAST(besitzer, gast), GREATEST(besitzer, gast))
Das Problem dabei ist, dass du dann nur einen der beiden Datensätze bekommst und damit 345 entweder nur noch als Besitzer oder nur noch als Gast auftaucht. Besser wäre es, das in MySQL nicht zu gruppieren, sondern in PHP mit einem Gruppenwechsel zusammenzufassen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (07-01-2013 um 13:23 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 07-01-2013, 17:35
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

ja das ist das problem, nur es gibt ja nun mal die möglichkeit einen kumpel (kontakt) in seine fangruppe einzuladen und der andere Kumpel lädt wiederrum den anderen kumpel in SEINE gruppe ein.

aber so wie es aussieht, scheint es zu klappen, die doppelten einträge sind weg.

den befehl kannte ich noch nicht.


jetzt will ich vorher die einträge zählen, aber da zeigt er mir nur Menge 1 an, es müßten aber 3 einträge sein (2 normale und eben der 1 doppelte der vorher zuviel angezeigt wurde).

vorher waren es 4 (war ja 1 zuviel) und jetzt zeigt er mir aber nur 1 an. komisch, anhand dieser befehlskette, gibt er aber in der while schleife ja 3 datensätze aus, also müßte der bei dem vorherigen aufruf ja auch 3 ID's zählen und nicht nur 1???

SELECT COUNT(ID)...

Geändert von Gamer20 (07-01-2013 um 17:58 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 07-01-2013, 18:02
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
tja das forum ist doch net sp übel wie ich dachte (obwohl es den einen oder anderen muffel hier gibt).
[..]
was läuft denn da im hintergrund ab vor eine sortierung?
Solche Fragen sind es meist, die dazu führen können, etwas mufflig zu werden, denn was diese Funktionen machen, steht im Handbuch. Da ich beschlossen habe, etwas geduldiger zu werden, erkläre ich es dir aber trotzdem:

LEAST() gibt den kleinsten der übergebenen Werte zurück, GREATEST() den größten. CONCAT_WS(s, a, b) verbindet die Strings a und b mit dem Separator s. Der ganze Ausdruck gibt also einen String zurück, in dem die beiden IDs von Besitzer und Gast enthalten sind und zwar immer mit der kleineren ID vorn und der größeren hinten, unabhängig davon, welche von beiden Besitzer ist und welche Gast.

Dadurch erhältst du für beide Datensätze den Wert "345-879" und kannst damit die Gruppierung vornehmen.

Edit: Das mit der Zählung musst du genauer erklären, ich kann dir da nicht folgen.

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (07-01-2013 um 18:05 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 07-01-2013, 18:16
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

ich wollte eine sql anweisung vorher, die menge der gefundenen einträge in der überschrift der entsprechenden gruppe ausgeben.

so das eben die leute wissen, wieviele mitglieder vorhanden sind.

das ist die while schleife bei der es funktioniert:

Code:
$ausgabe = mysql_query("SELECT ID,Besitzer,Gast 
FROM gruppepers 
WHERE Besitzer = '$ID' OR Gast = '$ID'
GROUP BY CONCAT_WS('-', LEAST(Besitzer, Gast), GREATEST(Besitzer, Gast))
ORDER BY ID LIMIT $start,$Schritt");
vorher wollte ich die einträge zählen (alter code, der mir Summe 4 ausgibt, statt 3):

Code:
$Anzahl	= mysql_result(mysql_query("SELECT COUNT(ID) 
FROM gruppepers WHERE Besitzer = '$ID' OR Gast = '$ID'"),0);

Geändert von Gamer20 (07-01-2013 um 18:49 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 07-01-2013, 18:28
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Dann kannst du doch den alten Code nehmen, um die Mitglieder zu zählen, wenn der schon das richtige Ergebnis liefert und danach dann halt die gruppierte Abfrage ausführen. Ich versteh das Problem nicht, weil es so klingt, als hättest du gar keins. Liste doch mal die Beispieldatensätze auf (du redest von vieren, hast aber bisher nur zwei gezeigt) und erklär daran dann, was du gerne haben willst.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 07-01-2013, 18:48
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

der alte zählcode gibt ja nicht die richtige menge an, der gibt ja 4 aus.

DS gruppe besitzer gast

1 31 345 591
2 22 345 879
3 87 289 345
4 87 879 345

die gruppenID ist hier nicht von belangen.

es müßte folgende datensätze ausgegeben werden (was es anscheinend bei der while schleife macht -> mit deiner modifikation)

1,2,3

datensatz 4 ist zuviel, da es ihn ja schon unter nr.2 in umkegehrter teihenfolge gibt.

soweit scheint ja alles zu klappen.

die whileschleife ist die 2. SQL abfrage in meinem PHP script.

jetzt das PROBLEM bei der 1. abrage, die NUR die einträge zählt, für die überschrift.

dort müßte die summe "3" ausgegeben werden. da datensatz 1,2,3 korrekt ist (die 4 nicht).

mit meinem alten code für das zählen der datensätze, wird aber eine summe von 4 datensätzen ermittelt (ohne CONCAT_WS).

mit CONCAT_WS wird mir unter $Anzahl nur die menge "1" ausgegeben, es sind aber 3 datensätze.
Mit Zitat antworten
  #8 (permalink)  
Alt 07-01-2013, 18:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

D. h. Datensatz 4 soll ubersprungen werden, weil er bei „gruppe“ denselben Wert hat, wie schon Datensatz 3, richtig?

Dann mach doch die COUNT()-Abfrage einfach mit „GROUP BY gruppe“.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 07-01-2013, 20:27
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

hmm ich glaube das was ich machen will, wird mit sql nicht funktionieren.

geh mal von kontaktlisten aus.

wenn ich jemand in meiner liste habe, hat der andere nutzer mich ja auch in seiner liste.

was wenn der 2. nutzer mir nochmal eine anfrage schickt (für eine andere gruppe), von sich aus (vorher habe ICH ihm eine einladung geschickt).

ich diese dann bestätige, dann wird wieder ein neuer datensatz erzeugt, nur in umgekehrte reihenfolge der nutzer id.

Datensatz2 -> 345 879 (1. anfrage für meine fangruppe)

Datensatz4 -> 879 345 (2. anfrage vom kumpel für seinen sportverein)

indem fall werden wird mir beide datensätze ausgegeben.

Abfrage:
"Besitzer = '$ID' OR Gast = '$ID'" // $ID ist meine eigene nutzerid, die zu meinem konto gehört.

weil meine ID in beiden datensätzen drin steht.

jetzt will ich eine liste erzeugen, in der drin steht, mit wem ich im kontakt stehe.

also muß ich ja prüfen in welcher spalte meine ID drin steht (Besitzer = '$ID' OR Gast = '$ID')

und dann wird dieser datensatz genommen und die nutzerID ausgegeben, die NICHT meiner ID entspricht.

ich kann ja leider nicht nur 1 spalte prüfen, da ich ja nicht vorher weiß, ob ICH eine einladung bestätigt habe (als gast) oder ob ich eine raus geschickt habe -> besitzer (kontaktanfrage).

gedanklich müßte ich

suchanfrage 1:

- in spalte 1 (besitzer), in allen datensätzen prüfen ob meine ID drin steht
- dann von der gegenüberliegenden spalte die ID nehmen

suchanfrage 2:

- in spalte 2 (gast), in allen datensätzen prüfen ob meine ID drin steht
- dann von der gegenüberliegenden spalte die ID nehmen


und dann doppelte ID's raus löschen, so das jede ID nur 1x drin steht

und dann erst das ERG per while schleife ausgeben.

tja naja das wars dann wohl, ich danke dir trotzdem für dieses komplizierte problem.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mysql: Rundungsfehler bei berechneten Spalten? Lennynero SQL / Datenbanken 6 11-01-2012 11:40
Bei der Abfrage Spalten mit yes ignorieren? xxcoolxx SQL / Datenbanken 12 19-03-2010 14:39
Rahmen auch bei Spalten ohne Inhalt komikaa HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 6 21-06-2005 14:32
Update - Problem bei zwei Spalten der_Behr SQL / Datenbanken 8 16-02-2004 21:08
Performance bei vielen Spalten? Aurelius SQL / Datenbanken 3 17-11-2003 22:01

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 21:51 Uhr.