www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenPraxisPHP/MYSQL - Mit UNION vereinen
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Praxis" - PHP/MYSQL - Mit UNION vereinen
PHP/MYSQL - Mit UNION vereinen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Praxis"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

PHP/MYSQL - Mit UNION vereinen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:50 Mi 31.01.2007
Autor: oli_k

Hallo,
folgendes Problem (bin noch sehr neu in dem Thema):

Ich habe eine Tabelle mit zwei Spalten, der Einfachkeit halber nenne ich diese hier jetzt mal a und b. In beiden Spalten stehen Nummern, es können sowohl in Spalte a als auch in Spalte b identische Nummern vorhanden sein.
Nun sollen alle Nummern Punkte bekommen, in meinem Beispiel für jedes Erscheinen in Spalte a zehn Punkte und für jedes Erscheinen in Spalte b drei Punkte. Ich möchte nun eine Rangliste aller Nummern machen, sortiert nach den Punkten und natürlich darf jede Nummer nur einmal vorkommen in der Rangliste. Es muss auch berücksichtigt werden, dass eine Nummer auch z.B. 17*3+13*10 Punkte bekommen kann, die Häufigkeit also nicht beschränkt ist.
Mein Gedankengang war, zuerst mal mit SELECT zwei Datensätze zu bekommen, die den einzelnen Nummern jeweils die "3er-Punkte" (1. Datensatz) und jeweils die "10er-Punkte" (2. Datensatz) zuordnet. Das habe ich gemacht, in dem ich jeweils COUNT(*)*10 bzw. COUNT(*)*3 zusammen mit der Nummer in eine Zeile gebracht habe.
Diese beiden Datensätze wollte ich nun vereinen, hier komme ich allerdings nicht mehr weiter. Wenn ich es nach meiner Idee mache (ab hier fehlen mir auch weitergehende Kenntnisse..), ist das Vereinen solange kein Problem, solange keine Nummer in beiden Datensätzen vorkommt; Das heisst: Kommt die Nummer nur in a vor, habe ich im vereinten Datensatz die Nummer und die dazugehörigen Punkte aus a angezeigt. Selbiges für b. Kommt die Nummer in a und b vor, habe ich die Nummer und NUR DIE PUNKTE AUS a DABEI.

Wie bekomme ich es jetzt hin, dass er die Punkte aus a und b beim vereinen ADDIERT, und nicht ÜBERSCHREIBT?

Hier mein Code:

$resultset = mysql_query ( "(SELECT (COUNT(*) * 3) as Drei, a as Nr FROM haupttabelle GROUP BY a order by a asc) UNION (SELECT (COUNT(*) * 10) as Zehn, b as Nr FROM haupttabelle GROUP BY b order by b asc) ORDER BY Nr" );


Habe was von Subselect gehört, das verstehe ich aber immer noch nicht :(


Wäre für eine Lösung meines Problems sehr dankbar, könnt mir glauben, habe mich wirklich lange damit beschäftigt,

Oli

        
Bezug
PHP/MYSQL - Mit UNION vereinen: Antwort
Status: (Antwort) fertig Status 
Datum: 18:17 Fr 02.02.2007
Autor: Marc

Hallo Oli,

> Habe was von Subselect gehört, das verstehe ich aber immer
> noch nicht :(

Ein Subselect ist einfach ein verschachtelter SELECT, der an Stelle des Tabellennamens steht, z.B.

SELECT count(*) FROM (SELECT author FROM articles GROUP BY author) AS meinsubselect;

Man kann sich das so vorstellen, dass aus dem inneren SELECT-Statement "SELECT author FROM articles GROUP BY author" eine temporäre Tabelle "meinsubselect" erstelllt wird und anschließend "SELECT count(*) FROM meinsubselect" darauf ausgeführt wird.
Auf die MatheRaum-Datenbank angewendet ergibt die obige Abfrage übrigens: 14566 (d.h., 14566 verschiedene Autoren haben Artikel in unser Forum gepostet).

Es kann sein, dass MySQL auf die Benennung des subselect verzichtet und man schreiben kann: "SELECT count(*) FROM (SELECT author FROM articles GROUP BY author)". PostgreSQL besteht jedenfalls auf die Benennung.

Deine Abfrage könnte man also so schreiben:

1: SELECT Nr, sum(punkte) FROM (SELECT a AS Nr, 3 AS punkte FROM haupttabelle 
2:                              UNION
3:                              SELECT b AS Nr, 10 AS punkte FROM haupttabelle) AS subselect
4: GROUP BY Nr
5: ORDER BY Nr


oder etwas komplizierter, aber platzsparender:

1: SELECT Nr, sum(punkte) FROM (SELECT a AS Nr, count(*)*3 AS punkte FROM haupttabelle GROUP BY Nr 
2:                              UNION
3:                              SELECT b AS Nr, count(*)*10 AS punkte FROM haupttabelle GROUP BY Nr) AS subselect
4: GROUP BY Nr
5: ORDER BY Nr


Viele Grüße,
Marc

Bezug
                
Bezug
PHP/MYSQL - Mit UNION vereinen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:08 Sa 10.02.2007
Autor: oli_k

Hallo, habe es jetzt so gemacht:

"SELECT Nr, sum(Punkte) FROM ((SELECT (COUNT(*) * 3) as Punkte, a as Nr FROM haupttabelle GROUP BY Nr) UNION (SELECT (COUNT(*) * 10) as Punkte, b as Nr FROM haupttabelle GROUP BY Nr) AS subselect GROUP BY Nr ORDER BY Nr"


Und es kommt jedes mal bei
while($daten = mysql_fetch_object($resultset))
(
echo $daten->Nr; echo "---"; echo $daten->Punkte; echo "<br>";
)


die Fehlermeldung "supplied argument is not a valid MySQL result resource"... Was habe ich noch falsch gemacht? Die beiden Abfragen aus der Union funktionieren einzeln einwandfrei... Was ist noch falsch?

Danke
Oli

Bezug
                        
Bezug
PHP/MYSQL - Mit UNION vereinen: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:20 Mo 12.02.2007
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                                
Bezug
PHP/MYSQL - Mit UNION vereinen: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 22:42 Fr 16.02.2007
Autor: oli_k

...?

Bezug
                                        
Bezug
PHP/MYSQL - Mit UNION vereinen: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:20 Do 22.02.2007
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                        
Bezug
PHP/MYSQL - Mit UNION vereinen: Antwort
Status: (Antwort) fertig Status 
Datum: 14:18 Do 22.02.2007
Autor: Marc

Hallo Oli,

> "SELECT Nr, sum(Punkte) FROM ((SELECT (COUNT(*) * 3) as
> Punkte, a as Nr FROM haupttabelle GROUP BY Nr) UNION
> (SELECT (COUNT(*) * 10) as Punkte, b as Nr FROM
> haupttabelle GROUP BY Nr) AS subselect GROUP BY Nr ORDER BY
> Nr"
>  
> Und es kommt jedes mal bei
>  while([mm]daten = mysql_fetch_object([/mm]resultset))
>  (
>  echo [mm]daten->Nr; echo "---"; echo [/mm]daten->Punkte; echo
> "<br>";
> )
>  
> die Fehlermeldung "supplied argument is not a valid MySQL
> result resource"... Was habe ich noch falsch gemacht? Die
> beiden Abfragen aus der Union funktionieren einzeln
> einwandfrei... Was ist noch falsch?

Verbinde Dich doch mal direkt mit der Datenbank, indem Du in einem Konsolenfenster eingibst
mysql -d datenbankname
Dort führe den SQL-Befehl manuell aus. Falls er fehlerhaft ist, sollte dort eine Fehlermeldung erscheinen.

Alternativ könntest Du auch mal im PHP-, Webserver-Log nachschauen, ob PHP die SQL Fehlermeldung vielleicht dort untergebracht hat.

Viele Grüße,
Marc


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Praxis"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]