SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11.04.2010, 00:50:47
krampi krampi ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 11
SUM summiert falsch bei MySQL

Hallo PHPler.
Bei mir taucht leider ein Problem auf, das ich mir nicht erklären kann und wo ich weder bei deutschen noch englischen Seiten wirklich eine Lösung finde - vielleicht habe ich auch die falschen Stichwörter benutzt bei der Suche nach Antworten.

Ich möchte eine Summe bilden aus zwei Tabellen und als Ergebnis rauskommen sollte eigentlich
2 / 10 / 180 / 145 / -180 / 145 / -35
2 / 11 / 45 /30 /-45 / 30 / -15
Aber statt dessen kommt folgendes:
2 / 10 / 540 / 290 / -540 / 290 / -250
2 / 11 / 45 /30 /-45 / 30 / -15

Wieso? Ich verstehe es nicht.
Ist ein Fehler im Code, den ich nicht verstehe?


PHP-Code:
$query "SELECT ex_st_sell.stock_id, ex_st_buy.stockprice, COUNT(ex_st_sell.stockcount) AS sellcount, COUNT(ex_st_buy.stockcount) AS buycount ".
         
"FROM ex_st_sell, ex_st_buy ".
         
"WHERE ex_st_sell.stock_id = ex_st_buy.stock_id AND ex_st_sell.stockprice = ex_st_buy.stockprice ".
         
"GROUP BY ex_st_sell.stock_id, ex_st_sell.stockprice ".
         
"ORDER BY ex_st_sell.stock_id";


$result mysql_query($query) or die(mysql_error());
WHILE(
$row mysql_fetch_array($result)){
        
$kurstest $row['buycount']-$row['sellcount'];
        echo 
$row['stock_id']. " / "$row['stockprice']. " / "$row['sellcount']. " / "$row['buycount']. " / "$kurstest;
        echo 
"<br/>";
        } 
Vielleicht weiß jemand Rat, denn ich bin langsam am Rande der Verzweiflung.

Grüße und Dank im Vorraus,
krampi
Mit Zitat antworten
  #2  
Alt 11.04.2010, 18:54:44
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: SUM summiert falsch bei MySQL

Da du COUNT und nicht SUM nutzt wäre es möglich, daß hier ein anderes Ergebnis erziehlt wird.
Mit Zitat antworten
  #3  
Alt 11.04.2010, 19:59:23
krampi krampi ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 11
AW: SUM summiert falsch bei MySQL

Ah, ich hatte noch den anderen Code-Text eingefügt. Also, Count war recht falsch, aber unter Sum lautet das Ergebnis wie oben beschrieben.

Vielen Dank für den Hinweis.
Mit Zitat antworten
  #4  
Alt 12.04.2010, 00:16:27
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: SUM summiert falsch bei MySQL

hi

ohne Tabelle mit den Werten können wir nur raten warum er
rot verdoppelt und blau verdreifacht.

2 / 10 / 180 / 145 / -180 / 145 / -35
2 / 11 / 45 /30 /-45 / 30 / -15
Aber statt dessen kommt folgendes:
2 / 10 / 540 / 290 / -540 / 290 / -250
2 / 11 / 45 /30 /-45 / 30 / -15

vielleicht suchst du ja nach MAX und nicht SUM.

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #5  
Alt 12.04.2010, 09:40:37
krampi krampi ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 11
AW: SUM summiert falsch bei MySQL

Zitat:
Zitat von Ckaos Beitrag anzeigen
hi

ohne Tabelle mit den Werten können wir nur raten warum er
rot verdoppelt und blau verdreifacht.

2 / 10 / 180 / 145 / -180 / 145 / -35
2 / 11 / 45 /30 /-45 / 30 / -15
Aber statt dessen kommt folgendes:
2 / 10 / 540 / 290 / -540 / 290 / -250
2 / 11 / 45 /30 /-45 / 30 / -15

vielleicht suchst du ja nach MAX und nicht SUM.

mfg

Ckaos
Hallo Ckaos, erst einmal meinen Dank, dass du mich darauf aufmerksam machst, dass ich die Tabellen noch beschreiben könnte. Das mache ich jetzt erstmal.

Die beiden Tabellen habe ich als JPEG-Datei mit ihrem jeweiligen Namen versehen angehangen. Das ist leichter zu überblicken als wenn ich hier eine lose Tabelle reinschreibe.

Nun zum Ziel dessen:
Wie man anhand der Bezeichnungen im Code erkennen konnte, will/möchte ich eine Preisfeststellung schreiben, wie es an der Börse angewandt wird.
Heißt folgendes: Es gibt bei einem Aktienstückpreis von 10 Euro zirka 100 Verkäufer und 120 Käufer mit je einer Aktie, so gibt es einen Umsatz von 100 Aktien. Denn der Bedarf der 120 Käufer kann nur bedingt, durch die 100 Verkäufer bedient werden.
Bei einem Aktienpreis von 11 Euro gibt es 110 Verkäufer und 110 Käufer. Jeder hat je eine Aktie. Angebot und Nachfrage sind gedeckt. 110 Aktien wechseln den Besitzer.
Bei einem Aktienpreis von 12 Euro gibt es 120 Verkäufer und 100 Käufer. Jeder hat nur eine Aktie. Somit wechseln 100 Aktien den Besitzer.
Der neue Preis wäre 11 Euro, da 110 Aktien den Besitzer wechseln.

Man muss betonen, dass der Aktienpreis jener ist, den Verkäufer und Käufer für sich bestimmen. Man sucht und fwindet sich (meistens). Verkäufer A sagt, dass er für 11 Euro seine Aktie verkaufen will, muss aber hoffen, dass jemand diese auch für 11 Euro kaufen will.

Nun zum PHP-Problem.
In den 2 Tabellen sind Verkaufsaufträge (ex_st_sell) und Kaufaufträge (ex_st_buy) gespeichert. Alle 5 Minuten soll dann der Preis herausgefunden werden. Dazu aber sollen die Einträge aus den Tabellen summiert werden und dies anhand dessen, dass Stock_ID und Stockprice in beiden Tabellen gleich sind. Also z.B. wenn ex_st_sell.stock_id (2) = ex_st_buy.stock_id (2) und ex_st_sell.stockprice (10) = ex_st_buy.stockprice (10), so dass anhand Stock-ID mit 2 und Preis mit 10.
Aber in diesem Schritt will ich eben nur erstmal die Anzahl der Aktien (stockcount) nur summieren (bei sell wäre das 90 + 90). Anhand einer transaction-Tabelle, wo ich die Daten später einführen will (echo dient nur der Überprüfung, dass es richtig läuft) will ich dann später per MAX() den höchsten Umsatzwert heraussuchen.

Ich hoffe nur, dass das jetzt nicht zu kompliziert erklärt wurde von mir.
Miniaturansicht angehängter Grafiken
ex_st_sell.jpg   ex_st_buy.jpg  
Mit Zitat antworten
  #6  
Alt 12.04.2010, 17:01:08
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: SUM summiert falsch bei MySQL

Also momentan sehe ich einen Select, der 4 Werte holt. In deiner WHILE wird dem ein 5. Wert hinzugefügt. Lt. Echo dürften auch nur 5 Werte erscheinen.
In deinem Beispiel werden aber 7 ausgegeben.
Lt. deiner Aussage hast du aber nur COUNT gegen SUM getauscht.

Ich glaub dein Code, hier besonders dein SELECT, stimmt nicht mit dem überein, was du uns hier vorgegeben hast. 2 zusätzliche Werte werden nicht einfach so ausgegeben.
Mit Zitat antworten
  #7  
Alt 12.04.2010, 18:55:07
krampi krampi ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 11
AW: SUM summiert falsch bei MySQL

Danke, Urvater, für den Hinweis. Das lag daran, dass ich zuvor einige Male am Code gearbeitet habe und den geändert habe, in der Hoffnung, das Ergebnis zu finden. Aber nun, leider war auch dies falsch. :-(

PHP-Code:

$query 
"SELECT ex_st_sell.stock_id, ex_st_buy.stockprice, SUM(ex_st_sell.stockcount) AS sellcount, SUM(ex_st_buy.stockcount) AS buycount, ex_st_sell.total_s, ex_st_buy.total_b ".
         
"FROM ex_st_sell, ex_st_buy ".
         
"WHERE ex_st_sell.stock_id = ex_st_buy.stock_id AND ex_st_sell.stockprice = ex_st_buy.stockprice ".
         
"GROUP BY ex_st_sell.stock_id, ex_st_sell.stockprice ".
         
"ORDER BY ex_st_sell.stock_id";


$result mysql_query($query) or die(mysql_error());
WHILE(
$row mysql_fetch_array($result)){
        
$kurstest $row['total_s']+$row['total_b'];
        echo 
$row['stock_id']. " / "$row['stockprice']. " / "$row['sellcount']. " / "$row['buycount']. " / "$row['total_s']. " / "$row['total_b']. " / "$kurstest;
        echo 
"<br/>";
        } 
Mit Zitat antworten
  #8  
Alt 13.04.2010, 00:04:25
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: SUM summiert falsch bei MySQL

Hi

Zitat:
Aber in diesem Schritt will ich eben nur erstmal die Anzahl der Aktien (stockcount) nur summieren (bei sell wäre das 90 + 90).
Nun so wie ich das sehe hast du ein denkfehler bei deinem JOIN
Zitat:
FROM ex_st_sell, ex_st_buy "
Da er beide Tabellen in bezug bringt kommt das ergebnis was du nicht willst.

anhand des Bsp.
Zitat:
AND ex_st_sell.stockprice = ex_st_buy.stockprice "
er nimmt ja die "sell" und joined dann "buy"
Bei Wert 10 findet er in "sell" 2 Einträge. Bei "buy" dann 3.
Rechnung: 2 * 3 = 6 also summe= 6*90 = 540 also das Angezeigte.
Durch dein GROUP BY siehst du "nur" 2 zeilen es sind aber 6 bei 10 und 2 bei 11.
Bildlich:
sell | buy
uid|price || uid|price
2 |10 || 1 |10
| || 15 |10
| || 20 |10
10 |10 || 1 |10
| || 15 |10
| || 20 |10

schau dir hier im forum mal das Bild zu JOIN's an
http://www.selfphp.de/forum/showthread.php?t=22220

Desweiteren:
Wozu speicherst du value das ergibt sich doch aus
stockprice * stockcount

Schau dir bei deiner Datenbankplanung mal wiki_link Normalisierung an.

Und als tip falls das ein Aktienspiel wird ;) und du mit 1000enden einträgen rechnest, investier zeit und beschäftige dich mit der Planung
deiner DB und arbeite mit simulierten 1000enden einträgen.

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #9  
Alt 14.04.2010, 11:15:25
krampi krampi ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 11
AW: SUM summiert falsch bei MySQL

Vielen Dank für den Hinweis. Ich habe die Chance genutzt und meine Tabellenstruktur geändert, so dass jede Order in der Tabelle ex_transfer landen. Ich war auch ein wenig am experimentieren, tolle Ergebnisse gehabt und doch beim Feintuning tritt ein Fehlerchen auf.

PHP-Code:
$sell =   "SELECT ex_transfer.stock_id, ex_transfer.stockprice, ex_transfer.order, SUM(ex_transfer.endvalue) AS selldigit ".
          
"FROM ex_transfer WHERE ex_transfer.order='1' ".
          
"GROUP BY ex_transfer.stockprice ";

$buy =    "SELECT ex_transfer.stock_id, ex_transfer.stockprice, ex_transfer.order, SUM(ex_transfer.endvalue) AS buydigit ".
          
"FROM ex_transfer WHERE ex_transfer.order='0' ".
          
"GROUP BY ex_transfer.stockprice ";

$wert $buy-$sell;

$result mysql_query($wert) or die(mysql_error());
WHILE(
$row mysql_fetch_array($result)){
        echo 
$wert;
        echo 
"<br/>";
        } 
Die Fehlermeldung lautet
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0' at line 1"

Ich gestehe, den Fehler nicht zu verstehen. Sicher eine Lücke, die ich noch füllen muss.

Weiß jemand Rat. An sich habe ich hier eine klare strukturelle Vorstellung, wie ich was machen muss bzw. soll. Aber es hakt doch ein bisschen an fehlender Erfahrung.
Mit Zitat antworten
  #10  
Alt 14.04.2010, 14:00:12
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: SUM summiert falsch bei MySQL

Hi

also sorry, aber das gepostete ergibt kein Sinn.
Zitat:
$wert = $buy-$sell;
Da subtrahierst du ein STRING von einem anderen und dann
willst du das Ergebnis als Query abschicken?
Zitat:
$result = mysql_query($wert) or die(mysql_error());
Selbst wenn du $sell und $buy als Query's absetzt erhälst du ein Array
als Ergebnis welches du auch nicht subtrahieren kannst.

Zitat:
Ich habe die Chance genutzt und meine Tabellenstruktur geändert, so dass jede Order in der Tabelle ex_transfer landen.
Vielleicht solltest erstmal lernen wie man eine Datenbankstruktur plant.
Sie dann umsetzen und dann erst die Anwendungsschicht planen/umsetzen.

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
Antwort


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

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Brauche Hilfe Partygirl MySQLi/PDO/(MySQL) 10 01.03.2011 08:18:11
MySQL 4 "große" Abfragen coder90 MySQLi/PDO/(MySQL) 0 06.09.2008 13:45:08
MySQL Page Script. Problem. dtone MySQLi/PDO/(MySQL) 8 15.10.2006 14:58:06
Was ist falsch? MySQL Eintragung Sarah19 MySQLi/PDO/(MySQL) 11 03.02.2005 00:10:23
MySQL - ORDER BY RAND() und PHP MacMarc PHP Grundlagen 15 05.12.2002 22:23:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24:12 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt