Ik heb drie tabellen welke ik via een join op deze wijze lees:
$sqlCombination = "
	SELECT person.*, horse.*, 2010Combination.* 
	FROM FEIPerson AS person
	INNER JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid 
	INNER JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid 
	WHERE 2010Combination.is_nc = 'No' 
    AND 2010Combination.is_waitingList = 'No'
	ORDER BY person.competing_for_country, horse.complete_name ASC";

Nu moet er in de tabel 2010Combination iets aangepast worden in de volgorde zoals hierboven is aangegeven bij ORDER.
Dit probeer als volgt maar het werkt niet.
<?php
			while ($x < $numbercombination)
				{
				$combinationID = mysql_result($resultcombination,$x,"combinationID"); 
				echo "Counter = ".$x." - CompNo = ".$CompNo." - combinationID = ".$combinationID."<BR>";
				$combinationLocked=mysql_result($resultcombination,$x,"combinationLocked"); 
				if($combinationLocked == "No")
					{
					$sqlCombUpdate = "
					UPDATE 2010Combination 
					SET compNumber ='".$CompNo."' ,combinationLocked='Yes' 
					WHERE combinationID= '".$combinationID."' 
                    ORDER BY person.competing_for_country, horse.complete_name ASC";
//					echo $sqlCombUpdate."<BR>";
					$resultcombupdate = MYSQL_QUERY($sqlCombUpdate) or die('Number UPDATE Combination Query failed: ' . mysql_error());
					$CompNo++;
					}
				$x++;
				}// end while
?>

Een idee wat ik fout doe?

order by in een update-query???
precies die hele ORDER BY kan er uit. Dit gebruik je alleen in combinatie met een SELECT query

[size=xsmall]Toevoeging op 16/09/2014 22:55:34:[/size]

Je werkt met de verouderde mysql_ functies in plaats van de mysqli_ functies of PDO.
Ook één bepaald record uit een result trekken ($x) doet mij sterk denken aan een verkeerde aanpak. Om het database verkeer zo klein mogelijk te houden wil je alleen datgene in je result dat je ook werkelijk nodig hebt.
Mocht het zo zijn dat je ze allemaal netjes doorloopt gebruik dan gewoon een foreach (je kunt daar ook een tellertje inzetten mocht dat werkelijk nodig zijn)
Waarom MYSQL_QUERY() met hoofdletters? bestaat die functie ook?

Beetje chaotisch allemaal. Zou je niet nog eens de moeite nemen om te kijken hoe anderen dat doen?
Dit is een heeeel oud script dat sinds afgelopen week niet meer juist werkt.
Het opnieuw aanpakken is waarschijnlijk de juiste oplossing maar heb al een tijdje niets meer in SQL gedaan en zal dus het trukje opnieuw moeten leren.

Wat is een goede tutorial?
> order by in een update-query???

Ja, dat kan. ;-) Er zijn bepaalde situaties waarin de volgorde waarin je je updates uitvoert belangrijk is (om bijvoorbeeld duplicate keys te voorkomen, alhoewel je dat ook nog wel met een subquery zou kunnen doen).

Een situatie waarin ik me update/order by kan voorstellen is wanneer je een realtime-achtige omgeving hebt waarin je veel records moet updaten, maar waarin bepaalde records voorrang hebben. Je zou dan een priority-veld kunnen toevoegen en daarop sorteren, zodat records met een hoge prio als eerste worden bijgewerkt.

In het kader van dit topic is er een teller CompNo die bij elke iteratie van de while-loop wordt verhoogd. Als je geen ordered update zou doen, zou het resultaat van de update mogelijk heel anders zijn.
@Willem vp
Ik werk met drie tabellen, in de eerste staan gegevens van de paarden en in de tweede de gegevens van de ruiters.
Deze worden in een derde gecombineerd en dient er een startnummer worden toegekend.
Dit startnummer dient uitgegeven te worden op landen volgorde van de ruiter en dan op alfabetische volgorde van het paard. Daarom zit er een teller in.

Aangezien ik al bijna vier jaar niet meer naar dit script heb gekeken moert ik het wiel opnieuw uitvinden.

Reageren