freaky-boy
Goto Top

Update mit count

Hallo Zusammen,

Ich habe ein Tabelle mit folgendem Muster

+ Download_ID + PC_ID + ANZ +
|      1      | 18362 |  0  |
|      2      | 18362 |  0  |
|      3      | 18362 |  0  |
|      4      | 28363 |  0  |

Ich möchte nun in der Spalte ANZ die vorkommen von der PC_ID eintragen.
Danach söllte es wie folgt aussehen

+ Download_ID + PC_ID + ANZ +
|      1      | 18362 |  1  |
|      2      | 18362 |  3  |
|      3      | 18362 |  3  |
|      4      | 28363 |  3  |

Ich bräuchte also einen Befehlt der so in der Art arbeitet:
UPDATE `downloads` SET `ANZ` = count(`PC_ID`)
Natürlich weiß ich, dass diese Code-Zeilen nicht funktioniert.
Leider funktioniert auch Folgendes nicht, da ich immer auf die selbe Tabelle zugreife und keine eindeutige Zuornung vorhanden ist.
UPDATE `downloads` SET `ANZ` = (SELECT count(`PC_ID`) FROM `downloads` WHERE `PC_ID` = `downloads`.`PC_ID` GROUP BY `PC_ID`)

Kann mir vllt. jemand den Weg zeigen und evtl. erklären?

Schon mal danke im Voraus.

Content-Key: 167488

Url: https://administrator.de/contentid/167488

Printed on: April 19, 2024 at 10:04 o'clock

Member: bugmenot2
bugmenot2 Jun 05, 2011 at 14:38:20 (UTC)
Goto Top
Einfach 2 Tabellen:
Download_ID und PC_ID (Download_ID primärschlüssel)
PC_ID und ANZ (PC_ID primärschlüssel)

Somit ist die Anzahl nicht mehr reduntant.

Dann würd ich die Schleife mit einem PHP-Script machen (weiß leider nicht wie das in MySQL etc. geht):
UPDATE `anz_tabelle` SET `ANZ` = (SELECT count(*) FROM `downloads` WHERE `PC_ID` = `$pci` GROUP BY `PC_ID`) WHERE `PC_ID`=`$pci`

Vielleicht hilfts.

MfG M_M
Member: Freaky-Boy
Freaky-Boy Jun 05, 2011 at 18:05:11 (UTC)
Goto Top
Die Idee an sich ist schon nicht schlecht. In Wirklichkeit habe ich aber keine Spalte ANZ sondern möchte an der Stelle einfach mit dem Wert weiter rechnen. Mit deiner Lösung müsste ich dann ja wieder anfangen, die beiden Tabellen zusammenzustellen. Außerdem wird sich meine Tabelle sehr schnell ändern deswegen wollte ich das ganze ohne "zwischenspeiern" lösen.

Gibt es denn eine Möglichkeit die PC_ID im UPDATE in eine Variable zu legen?
Member: Guenni
Guenni Jun 05, 2011 at 18:41:03 (UTC)
Goto Top
Hi Freaky-Boy,

. . . In Wirklichkeit habe ich aber keine Spalte ANZ, sondern möchte an der Stelle einfach mit dem Wert weiter rechnen. . . .

Dann frag' die Tabelle doch (nach dem Update ?) einfach mal so ab:

<?php

$query="select PC_ID , count(PC_ID ) as 'Anzahl' from downloads group by PC_ID ";  

/*
* Oder du suchst eine best. PC_ID . . .
* 
* $query="select PC_ID , count(PC_ID ) as 'Anzahl' from downloads where PC_ID=62124 group by PC_ID "; 
*/

$result=mysql_query($query);

while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
 
 echo "<p>".$row['PC_ID']." ist ".$row['Anzahl']." mal vorhanden<p>";  

}

?>

Somit hast du auch PC_ID und die Anzahl in einer Variablen.


Gruß
Günni
Member: nxclass
nxclass Jun 05, 2011 at 21:36:04 (UTC)
Goto Top
Da ich nicht so ganz verstehe was Du eigentlich erreichen willst, würde ich Dir einfach mal die Begriffe: PROCEDURE und CURSOR ( http://dev.mysql.com/doc/refman/5.1/de/cursors.html ) an den Kopf werfen.
Könnte das möglicherweise etwas sein was Du suchst ?
Member: Freaky-Boy
Freaky-Boy Jun 08, 2011 at 18:19:24 (UTC)
Goto Top
Danke mit PROCEDURE und CURSOR werde ich mich noch beschäftigen.
So wie ich das vermute, kratze ich gerade mal an der Oberfläche von SQL.

Ich habe mein Problem nun nach dem Vorbild von Günni gelöst.