php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 06-06-2007, 17:01
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Leute,

das Problem ist, dass ich derzeit keinen blassen Schimmer habe, wie ich meinen Ansatz realisieren könnte. Deswegen wollte ich mir bei euch Ansätze holen, wie ich die Situation möglichst sauber lösen kann.

Also das Problem ist folgendes:

Ich habe einen Zeitraum von X bis Y in UNIX-Timestamps und dieser Zeitraum kann größer als ein Monat sein. Also 1, 3 oder 6 Monate. Innerhalb dieser Zeiträume kann sich aber der Preis des Ganzen ändern. Dieser wird durch Preis, Gültig von und Gültig bis definiert.

Ich weiß nicht, wie ich nun am sinnvollsten daraus einen Rechnungsposten mache... Wie kriege ich die Preisänderungen in dem Zeitraum sinnvoll raus und verwende die. Das ist mein derzeitiges Problem.

VG
Henning
Mit Zitat antworten
  #17 (permalink)  
Alt 06-06-2007, 17:16
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Wie kriege ich die Preisänderungen in dem Zeitraum sinnvoll raus und verwende die. Das ist mein derzeitiges Problem.
glaub ich nicht

Poste mal den Source wie Du irgendwas rauskriegst.

Den kann man dann eventuell erweitern.
Mit Zitat antworten
  #18 (permalink)  
Alt 06-06-2007, 18:37
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
//Hier hole ich letzte und nächste Rechnungsdaten
$contractdata_res $db->query("SELECT `contractLastBilled`, `contractDue`
FROM `contract`
WHERE `contractID` = 'X'"
);

$contractdata mysql_fetch_assoc($contractdata_res);

$price_data $db->query("SELECT `contractPrice`, `contractPriceValidFrom`, `contractPriceValidTill`
FROM `contractPrice`
WHERE `contractPriceContract` = 'X'"
);

while(
$price mysql_fetch_assoc($price_data)) {

//Hier müssen die Zeilen verarbeitet werden


Das sind die Queries, die ich ausgearbeitet habe. Das Problem ist mit den Preisen. Der Zeitraum zwischen der letzten Rechnung und der nächsten Fälligkeit (Due) kann 1, 3 oder 6 Monate betragen in UNIX-Timestamps.

Das Problem was ich jetzt habe, ist die Verarbeitung des Preises.

VG
Henning
Mit Zitat antworten
  #19 (permalink)  
Alt 06-06-2007, 19:04
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

die zwei queries hintereinander zu schreiben macht keinen Sinn.

Bei der ersten Query wertest Du ja gar nix aus (kein mysql_fetch_assoc oder sonst was)

Wie sind denn beide Tabellen miteinander verknüpft ?

Beide Tabellen müssen ja einen gemeinsamen Schlüssel haben
(z.B. contract_art)
Mit Zitat antworten
  #20 (permalink)  
Alt 06-06-2007, 19:09
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Klar, der Vertrags-Query (der Erste) wird ausgewertet:

PHP-Code:
$contractdata mysql_fetch_assoc($contractdata_res); 
Die beiden sind voneinander anhand der contractID abhängig.
Warum macht es keinen Sinn, die beiden Queries nacheinander zu bearbeiten?!

VG
Henning
Mit Zitat antworten
  #21 (permalink)  
Alt 06-06-2007, 19:21
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ach so - hatt ich übersehn.

Du kannst aber beide Queries in einem machen:

SELECT .... FROM tabelle1, tabelle2 WHERE tabelle1.id = tabelle2.id
Mit Zitat antworten
  #22 (permalink)  
Alt 06-06-2007, 19:27
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi Koalo,

geht leider nicht, da die contractPrice Tabelle mehrere Einträge zu einer ContractID existieren können.
Mit Zitat antworten
  #23 (permalink)  
Alt 06-06-2007, 19:45
Koala
 PHP Junior
Links : Onlinestatus : Koala ist offline
Registriert seit: Jan 2006
Beiträge: 887
Koala ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Den Zusammenhang mußt Du mir erklären:

EINEM Vertrag sind mehrere Preise zugeordnet ?
Mit Zitat antworten
  #24 (permalink)  
Alt 06-06-2007, 19:46
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

Entweder verstehst du dein eigenes Schema nicht oder verwürfelst hier die Angaben derart, dass wir ein falsches Bild haben.

Ich habe es jetzt so verstanden: Du hast auf jeden Fall so eine Tabelle:
contract(ID, LastBilled, Due)

Und dann hast du eine von diesen hier, aber welche?
contractPrice(Price, PriceValidFrom, PriceValidTill, PriceContract)
contractPrice(Price, PriceValidFrom, PriceValidTill, PriceContract, ID)
Entweder ist PriceContract bereits der Bezug zur contract-Tabelle oder nicht.

Wie auch immer, du solltest dich über JOINs informieren. Denn auch wenn einem Vertrag mehrere Preise zugeordnet sind (Januar-Miete = x, Februar-Miete = y, ...) kann man joinen und den gewünschten Zeitraum mit WHERE filtern.

Unabhängig davon solltest du dein Schema mal aufräumen.
contract(ID, LastBilled, Due)
price(contract_ID, Price, ValidFrom, ValidTill)
Mehr brauchst du doch gar nicht.

Geändert von onemorenerd (06-06-2007 um 19:52 Uhr)
Mit Zitat antworten
  #25 (permalink)  
Alt 06-06-2007, 19:59
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo onemorenerd,

die Struktur ist bereits aufgeräumt, sie sieht wie folgt aus:

contract (ID, Due, LastBill)
contractPrice (ID, contract, contractPrice, contractPriceValidFrom, contractPriceValidTill)

Der Zusammenhang besteht über die contractID.

Ein Vertrag kann mehrere Preise haben, jedoch gibt es keine Überschneidungen. Ich muss nun es irgendwie hinkriegen, dass die X Monate, die zwischen LastBill und Due liegen, berechnet werden und auf der Rechnung ausgewiesen werden. Und genau da setzt das Problem an, dass ich nicht weiß, wie ich das realisieren soll.

VG
Henning
Mit Zitat antworten
  #26 (permalink)  
Alt 06-06-2007, 20:11
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

Zitat:
Original geschrieben von Someday
contract (ID, Due, LastBill)
contractPrice (ID, contract, contractPrice, contractPriceValidFrom, contractPriceValidTill)

Der Zusammenhang besteht über die contractID.

Ein Vertrag kann mehrere Preise haben, jedoch gibt es keine Überschneidungen. Ich muss nun es irgendwie hinkriegen, dass die X Monate, die zwischen LastBill und Due liegen, berechnet werden und auf der Rechnung ausgewiesen werden. Und genau da setzt das Problem an, dass ich nicht weiß, wie ich das realisieren soll.
Hättest du es gleich so formuliert, wäre das Problem längst vom Tisch.

SELECT * FROM contract AS c
JOIN price AS p ON (c.ID = p.ID)
WHERE c.LastBill <= p.PriceValidTill AND p.PriceValidFrom <= c.Due

Das liefert dir die Überdeckung. Die Tupel, bei denen die Zeitspanne c.Lastbill bis c.Due nicht vollständig in der Spanne p.PriceValidFrom bis p.PriceValidTill liegt, mußt du besonders behandeln. Aber das kannst du ja leicht in PHP abhandeln.
Mit Zitat antworten
  #27 (permalink)  
Alt 06-06-2007, 20:25
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo onemorenerd,

aber genau mit der Abarbeitung dieser Fälle habe ich Schwierigkeiten. Weil ich nicht weiß, wie ich das machen kann. Ich bräuchte folgendes Ergebnis:

1 x Vertrag
01.01.2007 - 31.01.2007 39 EUR
01.02.2007 - 31.02.2007 21 EUR
01.03.2007 - offen 35 EUR

VG
Henning
Mit Zitat antworten
  #28 (permalink)  
Alt 06-06-2007, 20:51
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

Wirklich nicht? Auch nicht mit "ORDER BY p.cid, p.PriceValidTill"?
Zeig doch mal deinen Versuch (den Code).
Mit Zitat antworten
  #29 (permalink)  
Alt 06-06-2007, 21:39
Someday
 Newbie
Links : Onlinestatus : Someday ist offline
Registriert seit: Jun 2005
Beiträge: 126
Someday ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo onemorenerd,

ich habe es folgendermaßen geplant:

PHP-Code:
function billAll($customer) {

$result $db->query("SELECT `contractID`
FROM `contract`
WHERE `contractStatus` = '1'
AND `contractDue` < '"
.time()."'");

while(
$row mysql_fetch_assoc($result)) {

$contractdata $this->get($row["contractID"]);

$begin $contractdata->lastbill;

while(
$begin $contractdata->due) {

//Jetzt prüfen, welche Konditionen / Preise für diesen Monat gültig sind. Im Sinne von:

$res_sub $db->query("SELECT `contractPrice`
FROM `contractPrice`
WHERE `contractPriceContract` = '"
.$contractdata->."'
AND `contractPriceValidFrom <= '"
.$begin."'
AND ( `contractPriceValidTill` > '"
.$end."'
OR `contractPriceValidTill` IS NULL )"
);

//Diese dann weiterverarbeiten ...


Was hälst du davon?

Geändert von Someday (06-06-2007 um 21:50 Uhr)
Mit Zitat antworten
  #30 (permalink)  
Alt 07-06-2007, 01:30
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vermutlich nicht viel, weil Du seinen Hinweis ja gar nicht beachtet hast. Hast Du seine Query überhaupt mal ausprobiert? Sieht auf den ersten Blick für mich aus, als ob Dir damit genau die Datensätze für einen bestimmten Zeitraum aus den Vertragskonditionen geliefert werden. Schleife drüber, dabei auf die beiden unvollständigen Monate achten, fertig ist die Laube. Fang an, konkrete Probleme zu posten.
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 09:31 Uhr.