www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorhilfe.de