Door
Henk Rensenbrink
op 31-01-2015 13:46
gewijzigd op 31-01-2015 13:47
714 views
Hallo allemaal,
ik heb een volgende probleem met mijn garage website. Ik probeer in mijn back-end in de gaten te houden wel offertes zijn geaccepteerd en welke niet. Daarvoor heb ik de volgende code gebruikt:
<?php $quote2 = $wpdb->get_results("SELECT Accepted FROM ReparationQuotes Where ReparationId = '" . esc_sql($rep->Id) ."'", OBJECT); ?>
En om deze te kunnen laten zien heb ik de volgende code gebruikt:
Hij laat inderdaad zien of er offertes zijn geplaatst, of deze zijn geaccepteerd de ja of de nee.
Maar hier komt het probleem. Er zijn uiteraard meerdere garages die offertes plaatsen op één aanvraag.
Nu pakt het systeem de laatste offerte, dus als nummer twee wel geaccepteerd is en nummer drie niet dan laat hij de laatste zien.
Hoe kan ik het zo maken dat als er een "1" (Geaccepteerd) staat in dezelfde reperatieID dat deze dan gepakt wordt en niet de laatste?
Alvast bedankt, en ik hoop dat ik het duidelijk hebt gemaakt.
Met vriendelijk groet,
Henk Rensenbrink
Het meest gangbare wat je in php samen met mysql gebruikt is zoiets:
<?php
$sql = "SELECT * FROM table";
$result = mysql_query($sql);
while($row = mysql_fetch_asscoc($result)
{
// hier kijken of het true of false is en je resultaten printen.
}
?>
Heb je ergens zo'n while loop staan? Of een foreach() loop?
Waarschijnlijk wordt er maar 1 record opgehaald: in de SQL staat "WHERE ReparationId = ...".
Waarschijnlijk niet, want de topicstarter zei al:
Er zijn uiteraard meerdere garages die offertes plaatsen op één aanvraag.
Waarschijnlijk werkt het zo: iemand wil een reparatie laten verrichten (reparation(id)).
Garages kunnen dan gaan "bieden" met offertes (reparationquotes).
Vervolgens kiest de gebruiker een garage (accepted == 1).
Maar het staat niet op voorhand vast of er al een offerte gekozen is.
Het probleem komt deels voort (denk ik) omdat je je interface voor twee verschillende zaken wilt gebruiken:
- (indien er nog geen offerte gekozen is) de lijst van offertes
- (indien er een offerte gekozen is) de uitgekozen offerte
@Thomas, mijn veronderstelling kwam voor uit de WHERE clausule met selectie op ReparationId.
Ik wilde niet zeggen dat er maar 1 offerte moest worden opgehaald, maar dat dat met deze SQL nu waarschijnlijk wel gebeurde.
En dat dat dus waarschijnlijk niet de bedoeling is. Zoals ook uit jouw situatiebeschrijving blijkt.
Okay even ter verduidelijking.
Op de administrator pagina krijg je een complete lijst met verscheidene reparaties die aangevraagt zijn.
vandaar de reparationID, dus een tabel met verscheidene reparaties die per reparatie een eigen ID hebben.
Nu is het natuurlijk zo dat ik bij de reparaties niet alle offertes hoef te zien, ik wil alleen weten of de persoon die een reparatie heeft aangevraagt tenminste één offerte heeft geaccepteerd.
@Jan: Op de manier hoe jij je code hebt geplaatst zou ik alle offertes binnen halen en laten zien welke geaccepteerd zijn. Het enige wat ik wil zien is:
1. Geen offerte.
2. Wel offertes maar geen één geaccepteerd.
3. Yes, voor tenminste één offerte geaccepteerd ook al staan er meerdere offertes op één reparatie.
Hier even ter verduidelijking de complete table zoals deze gespecificeerd wordt in de administrator pagina.