Mysql Spalten addieren

  • ich versuche gerade eine tabelle auszulesen.
    so siet die in etwa aus

    Code
    id	| name 	| zahl1	| zahl2	| zahl3	|zahl4
    1	| bla	| 50	| 20	| 30	| 99 
    2	| qwdf	| 1	| 48	| 26	| 73 
    ...


    jetzt möchte das ich sozusagen ein 2d array habe einmal mit id und einmal mit der summe und das ganze dann noch sortiert nach der summe
    so wärs mir am liebsten^^
    //vll so?
    SELECT `id`, `zahl1+zahl3` FROM solutions;
    //vll so?



    so soll das ergebniss dann sein

  • Und wo ist dein problem ??


    Wllst du immer zahl 1 und 3 addieren oder varrieren die ?? Naja eig. egal ist ganz leich anzupassen ;)


    Quelle: php-einfach.de (angepasst)

    PHP
    $abfrage = "SELECT id,zahl1,zahl2,zahl3,zahl4 FROM Tabellenname";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
       {
       $test[] = array( 'id' => $row->id,
    		    'summe' => ($row->zahl1 + $row->zahl3) );
       }


    UNGETESTET


    so würde ich es zu7mindest probieren... aber ich bin zu faul jetzt extra ne neue Tabelle anzulegen und es zu teste :D :D



    Try it !


    Kanu ;)

  • danke
    ja das war auch mein erster gedanke.


    aber da es schnell gehen soll und er dann ungefähr 40 spalten addieren soll und dass bei 1k zeilen ich denke da muss man sehr effektiv arbeiten.




    so nach stundenlanger suche eine gute sql Zeile gefunden.


    kann man da noch was sparen?
    mir kommt es so vor, dass meine Variante das in ein 2dimensionales array zu schreiben nicht die beste ist.
    und in meinen array ist die id und summe doppelt vorhanden(da ist bestimmt auch noch was an einsparen möglich).

  • Und wozu brauchstest du jetzt mich wen du eine auch in meinen Augen ziemlich effektive Lösung hast ?? =)


    Außerdem muss ich dir gestehen das ich nicht ganz verstehe warum er die Werte doppelt aufnimmt...
    Klär mich auf wenn du ne Ahnung hast bitte...



    Kanu

  • als ich den tread verfasst hatte wusste ich die lösung noch nicht.
    wie gesagt erst nach stundenlanger googlearbeit.
    hätt ja sein können das du eine optimale lösung kennst :)


    ja mm ich frag mich auch was das soll mit den 4 einträgen obwohl man nur 2 braucht in den array :(


    edit: ich habs nochmal versucht immernoch das gleiche,
    der einzige unterschied (den ich hier von der geposteten und meiner datei auf den pc habe) ist das ich anstat der `zahl1` dass hier `1a` stehen habe und für `zahl2`habe ich `2c`
    ansonsten ist das 1zu1 kopiert und dann gebe ich das natürlich noch mit print_r($array[) aus

  • Ne die optimale Lösung hab ich in dem Fall nicht weil ich vermeide mit 1k zeilen zu arbeiten ;) und daher nciht ganz so extrem auf vollständig minimierte Lösungen angewiesen bin ;)
    ich verstehe auvch nicht warum er überhaupt 4 Werte HAT eigendlich sollte er doch nur "summe" und "id" haben...



    PS: Juhuu ebend meine 500 Beiträge geknackt ^^

  • Ein einfaches googeln hat nach mysql_fetch_array() hat geholfen um das problem der 4 einträge zu lösen.
    "MYSQL_BOTH: Funktionsergebnis ist ein Array, das die Elemente des Ergebnisdatensatzes sowohl assoziativ als auch numerisch indiziert enthält. Dies ist der Default-Wert." Quelle: selfphp.info/funktionsreferenz/mysql_funktionen/mysql_fetch_array.php


    so würde dass dann aussehen wenn ich nur die 2 werte will mysql_fetch_array($query, MYSQL_ASSOC)
    aber anstat das MYSQL_ASSOC als 2ten parameter zu übergeben kann man auch gleich (Quelle: php.net/manual/de/function.mysql-fetch-array.php) mysql_fetch_assoc() verwenden.
    beides getestet liefert das gewünschte Ergebnis.


    auserdem kann ich noch 2 zeilen einsparen den zähler ($i) den ich vorher hatte braucht man nicht bei den array ($ausgabe[] = $temp; //reicht)
    so dass dann im endefekt dass hier rauskommt.


  • so nun gehts weiter.


    jetzt möchte ich alle spalten selecten aber nur 2 (oder3 oder 4...) Zeilen
    und dann soll mir die funktion ausspucken in welcher spalte die zahlen die größte abweichungen vom durchschnitt haben.


    also um bei meinen zahlen oben zu bleiben z.b.

    PHP
    $array[0] =  'zahl1' //dass soll dann in array[0] drinstecken berechnet wirds mit $schnitt = (1 + 50)/2; |50-$schnitt| + |1-$schnitt|; da kommt dann 49 raus bei 2 zahlen ist das ja leicht^^ mit mehreren dann auch
    $array[1] =  'zahl2' //28
    $array[2] =  'zahl4' //26
    $array[3] =  'zahl3' //4


    aber ich stehe zur zeit noch vollkommen auf den schlauch weiß nicht ganz wie ich da ran gehen soll man kann ja nicht von links nach rechts sortieren oder? (wenn man order by macht ists ja immer von oben nach unten)
    am liebsten natürlich wieder mit sql aber eine andere lösung würde es auch tuhen

  • Vielleicht sagst du mal wozu du das Ganze brauchst. Mir fallen nur Lösungen ein, die performancetechnisch eher nicht so gut sind, vor allem wenn ich von deinen erwähnten 1000 Zeilen ausgehe. Vielleicht gibt es aber eine andere Lösung, aber dafür müssen wir wissen, was du vor hast.

  • soll so funzen wie der akinator
    fals nicht bekannt: Er stellt ja nein fragen (naja man darf auch warscheinlich ja ,warscheinlich nein ,und weiß nicht anklicken^^)
    vorher denkt man sich eine person aus zu der man die fragen beantworten möchte nach 20-50 fragen sagt er (der akinator) dann welche Person das ist.



    mit der function die ich gestern hatte berechne ich welche person (wenn man jetzt beim akinator bleibt) am warscheinlichsten vom benutzer ausgedacht wurde.
    da bekomme ich ja dann die top 50 wahrscheinlichsten.
    jetzt muss man sich überlegen, anhand der wahrscheinlichen personen, welche frage man als nächstes stellt.
    und da dachte ich mir stellt man solche fragen die einige personen unwahrscheinlicher machen und andere wahrscheinlicher. (wenn jetzt z.b. bei den top 50 bei einer frage "ist die person mänlich" alle personen als warscheinlichkeit +100 punkte bekommen würden hilft ein das ja nicht weiter, es soll sich ja eine person an der spitze absetzen)



    einiger maßen verstanden?

  • Was ich also will ist, den Durchschnitt berechnen (von den 2 oder 3 oder 4 zeilen einer spalte) und danach die Zahl Spalte auswählen , in der es die größten Abweichungen gibt.


    habe mal deinen satz umgebaut :)


    sozusagen von allen spalten schnitt rechnen und dann die abweichung von den schnitt ausrechnen (für jede einzelne spalte unabhängig was in den anderen spalten steht) und am ende soll halt rauskommen in spalte 7 gibt es die größten abweichungen

  • ich weiß den code nicht^^
    SELECT SUM(*) as summe FROM `solutions` WHERE `id` = "2" OR `id` = "2" ORDER BY ?Spalte?;



    ob das WHERE `id` = "2" OR `id` = "2" da jetzt stimmt oder nicht ist erstmal egal das bekommsch dann schon hin wen ich nur paar zeilen haben will


    aber der Anfang ist schwierig da ich ja nicht alle spalten adiren will z.b. die id nicht.
    und das ende? order by sortiert doch immer nach oben und unten und nicht nach links und rechts.


    und bei mir gibts doch dann blos eine zeile mit den verschidenen summen (und dann fehlt ja auch noch die abweichung summe ist ja nichtal das endziel)

  • und ich bekomm die infos ja immer zeilenweise ich will sie aber spaltenweise.


    versuche jetzt das mit der hoffentlich einfacheren variante
    SELECT * FROM `solutions` WHERE `id` < 20
    den rest mache ich dann mit php aber hm eiß noch nicht ganz wie

  • Wenn du spaltenweise sortieren willst, bleibt dir nur das ganze umzudrehen und Spalten zu Reihen und Reihen zu Spalten zu machen - Stichwort Pivot-Tabelle. Ist aber mit Sicherheit eine der langsamsten Varianten.
    Und für den Rest bleibt dir nur PHP - da ist Rechnen und dann in PHP umsetzen angesagt, würde ich sagen ;)

  • das spaltenweise sortieren mache ich jetzt mit php da ich ja eh blos ein eine einzige zeile sortiere dann arsort()


    und zum glück habe ich jetzt auch eine super function gefunden SELECT stddev(spalte1),stddev(spalte2)
    stddev macht dass was ich wollte ungefähr fürt zumindest zur gleichen rein folge im endeffekt stddev() bestimmt die standartabweichung einer spalte bei mysql
    noch mal glück gehabt sonst wäre ich heute nicht mehr fertig geworden .

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!