1 Veld in query resultaat updaten naar numeriek volgorde.
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
Als ik je vraag goed begrijp dan kan je het met user defined variables doen:
Quote:
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++;
}
?>
$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
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 );
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 );
Gewijzigd op 09/08/2012 14:58:57 door Erwin H
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.