Just nu i M3-nätverket
Gå till innehåll

Hämta senaste post fungerar inte alltid


kungmats
 Share

Rekommendera Poster

Hej

Jag har en funktion som hämtar kundens senaste order och utifrån detta visar nästa leveransdatum. Problemet är att  någon enstaka gång (typ 1 på 200) hämtas inte den senaste posten utan någon tidigare order (oftast näst sista) från samma kund och då blir allt fel ...

Jag kan inte begripa hur detta kan uppstå. Jag har felsökt i månader nu men kan inte hitta felet. Koden är allt för komplex för att lägga ut allt här men det är i den här frågan det skiter sig. 

Det är inget fel på min db-uppkoppling. Allt annat fungerar som det ska.

 

Finns det något annat, bättre sätt jag kan skriva min sql-fråga för att vara helt 100 på att jag får den senaste ordern?

$k = $kundnummer;

$sql = " SELECT * FROM order WHERE kundid=? ORDER BY id DESC LIMIT 1 ";   
$stmt = $db->prepare($sql);                    
$stmt->execute(array("$k"));                  
while($c = $stmt->fetch())                 
{  
	echo $c['leveransdatum'];
}

 

Länk till kommentar
Dela på andra webbplatser

Vad är id du sorterar på? Ett löpnummer? Är det garanterat att öka för varje insert? Om du tar bort en post, finns det en risk att nästa insert "tar över" det gamla id?

 

Spontant skulle jag föreslå att du lägger till en kolumn med datum och tid när insert gjordes och hämtar senaste på den och se om det löser problemet.

Länk till kommentar
Dela på andra webbplatser

Ja, id är unikt och ökas hela tiden.

Att lägga till en kolumn för när den skapades fungerar inte ftersom jag redan har 70000 poster som måste ingå. Alla med sitt unika id.

 

Däremot har jag ju redan leveransdatum som jag kan använda men min frågeställning blir ju detsamma. Det ska ju fungera med id. Nånstans tänker jag fel eller så är det databasen som spökar.

image.png.22cd67ff24abcc6d029d2c8d183019eb.png

id.JPG

Redigerad av kungmats
Länk till kommentar
Dela på andra webbplatser

Undrar om det är så enkelt att databasen väljer att använda något slags index på id och det är inte helt uppdaterat alla gånger. Vad händer om du väntar en stund och kör frågan? Fungerar det då?

 

Kanske så enkelt att du kör din hämtning alldeles för snabbt efter att insert gjorts?

Länk till kommentar
Dela på andra webbplatser

Problemet är att jag aldrig får fram felet själv. Det händer bara när kunderna går in via sin egen länk. Om jag använder kundens identiska länk händer det inte.

"Inserten" är oftast gjord fleraveckor innan och det är inte kunden som gjort det.

Jag har provat alla kunders länkar (där felet uppstått) i olika webbläsare och laddat om sidan många, många gånger men jag kan inte få fram felet.

Länk till kommentar
Dela på andra webbplatser

Då kanske det är så enkelt att det är cache i webbläsaren som ställer till det? Php bör skicka med headrar som skall förhindra att sidor cachas, men det är nog ingen garanti. Prova att lägga på headrar som berättar för webbläsaren och eventuella brandväggar och så att det inte ska cachas och se om det hjälper.

 

Exempel finns här.

https://stackoverflow.com/questions/13640109/how-to-prevent-browser-cache-for-php-site

Länk till kommentar
Dela på andra webbplatser

Tack, jag har lagt till det nu för att testa. Att sortera på leveransdatum hjälpte inte. Jag fick in ett fel direkt efter.

Länk till kommentar
Dela på andra webbplatser

  • 3 veckor senare...

Jag sliter mitt hår fortfarande.
Jag felloggar och felloggar och felloggar. Samtidigt som jag kommer närmare kommer jag längre ifrån.
Nedanför finns mina rader som postar ordern. Bl.a. använder jag '$kundens_leveransdatum' som i min loggning här nedanför loggar RÄTT DATUM.
När ordern väl postas ( ... läs uppdateras ) tre rader längre ner utan kod mellan så väljer "update:n" att göra uppdateringen på orderdatumet före men på rätt kund.
Hur är detta möjligt?
Var tänker jag fel? Både order-id och leveransdatum sitter ju inom parantes och bör rimligen vara tvingande.
Dessutom finns ju bara en enda rad i db:n som har ordernumret med rätt leveransdatum. Ändå uppdateras fel rad.

// Logga leveransdatum för felsökning
mysqli_query($open, " INSERT INTO logga_leveransdatum SET kundid='{$_REQUEST['kundid']}', orderid='{$_REQUEST['id']}', 
variabel='kundens_leveransdatum',  leveransdatum= '$kundens_leveransdatum', rad='276', sida='posta_kundens_egna_bestallning' ");  


// Posta ordern
$sql = " UPDATE kundens_order SET ordersumma=? WHERE ( id=? && leveransdatum=? ) ";
$stmt = $db->prepare($sql);     
$stmt->execute(array( $ordersumma, $_REQUEST['id'], $kundens_leveransdatum ));

 

Redigerad av kungmats
Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...