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 15-11-2008, 21:11
steve-x
 Newbie
Links : Onlinestatus : steve-x ist offline
Registriert seit: May 2004
Ort: österreich
Beiträge: 106
steve-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem mit Sortierung und NULL

hallo!
habe eine tabelle für eine liga erstellt. die funzt so weit ganz gut. ich lasse ua. die TORDIFFERENZ direkt aus der db errechnen.
mein problem ist wie folgt:
wenn noch nicht alle mannschaften gespielt haben ist die TORDIFFERENZ bei einigen teams NULL. wie schaffe ich es, dass "-3" weniger als NULL ist?

gibt es da eine spezielle möglichkeit bei ORDER BY?

danke

PHP-Code:
SELECT  v.name_kurz, [...]
        
SUM(
            (IF(
h.id_heimverein v.idh.heimtoreh.gasttore)) - 
            (IF(
h.id_heimverein v.idh.gasttoreh.heimtore))
            ) AS 
Tordifferenz 
FROM liga_verein v
liga h 
WHERE h
.spieltag <= AND (h.id_heimverein=v.id OR h.id_gastverein=v.id
GROUP BY v.name_kurz 
ORDER BY Punkte DESC
Tordifferenz DESCTore DESC 
Mit Zitat antworten
  #2 (permalink)  
Alt 15-11-2008, 21:44
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

z.B. mit IF abfragen und einen geeigneten Wert bei NULL geben (aber nur in ORDER BY).
Mit Zitat antworten
  #3 (permalink)  
Alt 15-11-2008, 22:04
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
Kann man das überhaupt so unterscheiden?

mfg
Mit Zitat antworten
  #4 (permalink)  
Alt 15-11-2008, 22:16
steve-x
 Newbie
Links : Onlinestatus : steve-x ist offline
Registriert seit: May 2004
Ort: österreich
Beiträge: 106
steve-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
SUM(
(IF(
  
h.id_heimverein v.id,
        (IF(
h.heimtore NULL0h.heimtore)),
        (IF(
h.gasttore NULL0h.gasttore))
)) - 
(IF(
   
h.id_heimverein v.id
        (IF(
h.gasttore NULL0h.gasttore)),
        (IF(
h.heimtore NULL0h.heimtore))
))
) AS 
Tordifferenz 
hab es einmal so probiert. wird allerdings auch mit NULL ausgegeben.
oder hast du was anderes gemeint.
Mit Zitat antworten
  #5 (permalink)  
Alt 15-11-2008, 22:27
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

= NULL ist unfug, IS NULL ist besser
Mit Zitat antworten
  #6 (permalink)  
Alt 17-11-2008, 20:19
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Blackgreetz
Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
Kann man das überhaupt so unterscheiden?

mfg
Ist glaube etwas untergegangen. Weiß jmd. was dazu?

mfg
Mit Zitat antworten
  #7 (permalink)  
Alt 17-11-2008, 20:33
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Wir sehen hier nur deine Query. Wir wissen nicht wie flink dein DBS und dein PHP-Code sind. Daher kann man das nicht mit Gewissheit beantworten.
Teste einfach beide Varianten.
Mit Zitat antworten
  #8 (permalink)  
Alt 17-11-2008, 20:35
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nachdem du auch danach sortierst ist es potentiell erstmal besser die Berechnung direkt der DB zu überlassen.
Mit Zitat antworten
  #9 (permalink)  
Alt 17-11-2008, 20:47
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Blackgreetz
Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
Kann man das überhaupt so unterscheiden?

mfg
Ich würde nach Möglichkeit die Last verteilen, d.h. das was die DB kann, lasse ich sie tun, den Rest beim Client (PHP oder was auch immer).
Mit Zitat antworten
  #10 (permalink)  
Alt 18-11-2008, 01:33
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ihr müsst schon unterscheiden zwischen mir/meiner Frage und dem Threadstarter . D.h. ich will nicht danach sortieren und das oben ist dann ansich auch nicht mein Query.

Ich hab folgende Tabellenstruktur (imaginär):

Rechnungen: RID | datum
Rechnungsartikel: RAID | RNID | Preis

Query müsste dann wiefolg aussehen:

PHP-Code:
SELECT From Rechnungen Left Join Rechnungsartikel ON RNID RID 
Jetzt würd ich natürlich am ende jeweils den Endpreis einer Rechnung haben.
Sollt ich jetzt den per PHP oder im MySQL berechnen lassen?

Jetzt fällt mir ansich aber auf, dass ich ein SUM nicht in diesen Query einbauen kann, oder liegt ich da gerade falsch? (ohne zusätzlichen SELECT)

mfg
Mit Zitat antworten
  #11 (permalink)  
Alt 18-11-2008, 09:05
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. Warum LEFT JOIN?
2. Warum kannst du kein SUM anwenden?
Mit Zitat antworten
  #12 (permalink)  
Alt 18-11-2008, 09:54
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du sowohl die Artikel, wie auch die Summe haben möchtest, geht das idT nicht so einfach.
Was du machen könntest wäre ein Self-Join oder ein Subquery.

So oder so: Trotzdem MySQL rechnen lassen. Allein schon deshalb, weil du ansonsten die komplette Tabelle zum Webserver über die Leitung schiebst, obwohl du nur eine einzige Zahl haben willst: Nämlich die Summe.
Mit Zitat antworten
  #13 (permalink)  
Alt 18-11-2008, 15:14
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von asp2php
1. Warum LEFT JOIN?
2. Warum kannst du kein SUM anwenden?
1) Hatte nur INNER, Right und Left zur Auswahl - alle bringen das Gleiche Ergebnis in den Fällen.

2) Weil ich kein Group By drin hab, der für SUM doch notwendig ist.
..und Group by kann ich nicht nehmen, weil ich dann natürlich nicht alle Artikel drin hab.

@ghostgambler:
Ja, für eine Rechnung brauch ich beides
SelfJoin guck ich mir gerade an.
Subquery wollte ich ja nicht bzw. hab ich erstmal ausgeschlossen gehabt (das meinte ich mit zusätzlichen Select)

Bin dann mal so frei und guck mir Selfjoins an.

Ansich muss ich ja alle Daten sowieso "über die Leitung schieben", sodass ich ansich auch in PHP addieren könnte, aber hätte eben gedacht/mich gefragt, dass MySQL da eventuell schneller wäre.

mfg

Geändert von Blackgreetz (18-11-2008 um 15:18 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 18-11-2008, 16:53
steve-x
 Newbie
Links : Onlinestatus : steve-x ist offline
Registriert seit: May 2004
Ort: österreich
Beiträge: 106
steve-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@asp2php
vielen danke, hat funktioniert!

PHP-Code:
(IF(h.id_heimverein v.id,
   (IF(
h.heimtore IS NULL0h.heimtore)),
   (IF(
h.gasttore IS NULL0h.gasttore))
)) - ... 
Mit Zitat antworten
Antwort

Lesezeichen


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

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