Dames, Heren,

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?

Frank
Ik neem aan dat je met php eigenlijk MySQL bedoelt? Als je het namelijk in 1 query wilt doen dan moet je het in de query zelf zoeken.

Als ik je vraag goed begrijp dan kan je het met user defined variables doen:

SET @pos = 0;
UPDATE tabel_name SET update_field = ( @pos := @pos + 1 ) ORDER BY order_field ASC;

Ik had eigenlijk meer zoiets als dit in gedachte:


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

Frank
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 );
Erwin

... (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.

Reageren