Ik wil een veld updaten met een nummerieke waarde, maar dan oplopend van 1 tot aan het laatste record van de query. Dus als er in de selectie query 110 records zijn 1 veld updaten van 1 tot en met 110.
Ik heb op internet gezocht naar mogelijkheden, maar kom er niet zo snel achter. In VB bestaat de opdracht Set rs = QD.OpenRecordset(dbOpenForwardOnly) maar die kan ik in PHP niet vinden.
is er een mogelijkheid om bij het eerste record te beginnen en dan door het query resultaat te lopen tot het laatste record en dan ieder record 1 veld updaten?
mysql_select_db($database_kleinvee, $kleinvee);
$query_rsKooinummers = "SELECT
tbl_inschrijvingen.Iid,
tbl_inschrijvingen.TTid,
tbl_ras.sorteervolg,
tbl_kleuren.Volgnummer,
tbl_geslacht.Geslacht,
tbl_leeftijd.Leeftijd,
tbl_inschrijvingen.Kooinummer
FROM
((((tbl_inschrijvingen
INNER JOIN tbl_inzenders
ON
tbl_inschrijvingen.Uid = tbl_inzenders.Uid)
INNER JOIN
tbl_geslacht
ON
tbl_inschrijvingen.Gid = tbl_geslacht.Gid)
INNER JOIN
tbl_kleuren
ON
tbl_inschrijvingen.Kid = tbl_kleuren.Kid)
INNER JOIN tbl_leeftijd
ON
tbl_inschrijvingen.Lid = tbl_leeftijd.Lid)
INNER JOIN
tbl_ras
ON
(tbl_inschrijvingen.Rid = tbl_ras.Rid)
AND
(tbl_kleuren.Kid = tbl_ras.Kid)
WHERE
(((tbl_inschrijvingen.TTid) = '$tent'))
ORDER BY tbl_inschrijvingen.Iid
DESC ,
tbl_ras.sorteervolg ,
tbl_kleuren.Volgnummer ,
tbl_geslacht.Geslacht ,
tbl_leeftijd.Leeftijd
DESC;";
$rsKooinummers = mysql_query($query_rsKooinummers, $kleinvee) or die(mysql_error());
$totalRows_rsKooinummers = mysql_num_rows($rsKooinummers);
while($row_rsKooinummers = mysql_fetch_assoc($rsKooinummers)){
$teller = 0;
$sql="UPDATE rsKooinummers SET Kooinummer=$teller ORDER BY Iid DESC";
$teller++;
}
?>
Alleen dit doet niets.
Het probleem is dat er gesorteerd wordt op velden waardoor de Iid niet op volgorde staat. Hij moet dus de volgorde van de query aanhouden en dan het veld kooinummer vullen met ieder record een waarde +1
Dat is dus geen handige manier, want je gebruikt php waar je een query voor zou kunnen gebruiken. Zo heb je dus 110 queries teveel. Dat is nogal wat.
Zonder het te kunnen testen (want ik heb niet even een database met zoveel tabellen en inhoud) lijkt onderstaande query het te moeten kunnen doen:
SET @pos = 0;
UPDATE rskooinummers r
INNER JOIN (
SELECT i.Iid
FROM tbl_inschrijvingen i
INNER JOIN tbl_geslacht g
ON i.Gid = g.Gid
INNER JOIN tbl_kleuren k
ON i.Kid = k.Kid
INNER JOIN tbl_leeftijd l
ON i.Lid = l.Lid
INNER JOIN tbl_ras rs
ON (i.Rid = rs.Rid AND k.Kid = rs.Kid)
WHERE i.TTid = '$tent'
ORDER BY
i.Iid DESC ,
rs.sorteervolg ,
k.Volgnummer ,
g.Geslacht ,
l.Leeftijd DESC
) j ON r.Iid = j.Id
SET r.kooinummer = ( @pos := @pos + 1 );
... (want ik heb niet even een database met zoveel tabellen en inhoud) ...
Gelukkig maar, want dit is wel heel erg overdreven:
Tabel voor leeftijd, tabel voor geslacht?
Ik krijg ook altijd een beetje de kriebels als je met een join tabellen moet updaten, dat is bij een goed opgezette databases een zeldzaamheid.