Integrität der Datenbank beim update von OXSTOCK

Ich habe ein kleine View geschrieben, die mir den Lagerbestand der Artikel listet - getrennt nach deren Hauptkategorie - um dann den Lagerbestand zu verändern.

So können wir den Lagerbestand anpassen, ohne in die Verwaltung zu müssen.
Wir haben unter 300 Artikel und verwenden keine Varianten.

Was gibt es zu beachten, wenn ich einfach OXSTOCK verändere? Sollten noch andere Datenbankfelder verändert werden? Kann es zu Schwierigkeiten in der Datenbank kommen?
Sollte ich bei der Abfrage, die mir die Artikel gibt, bestimmte Artikel ausnehmen, damit sie garnicht in Gefahr kommen, verändert zu werden?
Ich hatte etwas von den Varianten und Vater-Artikel hier im Forum gefunden, aber ehrlich gesagt, nicht ganz verstanden.

$sQ = 'update oxarticles set oxstock = '.$value.' where oxid = '.$oDb->quote($key);

es gibt auch ein Feld “oxvarstock” bei Vaterprodukten, dort sollte die Summe der Varianten-Lagerbestände rein. (Das Feld wird irgendwo benutzt, wo entschieden wird ob der Vaterartikel angezeigt/geladen werden soll, sofern dessen Varianten noch bestand haben)

Danke, und jetzt habe ich auch einiges darüber gefunden.
Also:

-oxvarstock beinhaltet die Summe von oxstock der Varianten eines Vaterartikels
-eine Variante hat im Feld oxparentid die oxid des Vaterartikels, somit ist eine Variante eindeutig erkennbar, wenn dieses Feld nicht leer ist.

Aber wie erkenne ich eindeutig einen Vaterartikel - denn sum(oxstock) der Varianten könnte ja 0 sein?

Über oxvarname?

Bzw. Wie erkenne ich einen “nichtkaufbaren” Vaterartikel, dessen oxstock nicht verändert werden darf.

Ansonsten funktioniert mein kleines Modul recht gut, es listet mir, nach Hauptkategorie sortiert, die Artikel und deren Bestand auf und man kann ihn so schneller updaten, als in der Artikelverwaltung.
Hier die Funktion für die Arlikelliste:

 public function get_bestand()

 {

 if(!$this->_bestand)

  {

   $this->_bestand = oxNew( "oxarticlelist");
      
$sArticleTable = getViewName('oxarticles');
$sCategoryTable = getViewName('oxcategories');
    
$sSelect  = "SELECT `OXARTNUM` , `OXTITLE` , `OXPRICE` , `OXSTOCK` , `OXACTIVE` , `OXID` , IFNULL( Kategorie, 'Nicht zugeordnet' ) AS Kategorie
FROM ".$sArticleTable."
LEFT JOIN (
SELECT `OXOBJECTID` , `OXCATNID` , min( `OXTIME` ) , ".$sCategoryTable.".`OXTITLE` AS `Kategorie`
FROM `oxobject2category`
LEFT JOIN ".$sCategoryTable." ON ".$sCategoryTable.".`OXID` = `oxobject2category`.`OXCATNID`
GROUP BY `OXOBJECTID`
) AS A ON A.OXOBJECTID = ".$sArticleTable.".OXID
WHERE ".$sArticleTable.".OXACTIVE =1 
ORDER BY Kategorie, OXARTNUM";
         $this->_bestand->selectString($sSelect); 


 }
     return  $this->_bestand->getArray();      

} 

Vaterprodukte haben eine leere oxparentid = “” also AnführungszeichennixAnführungszeichen
"nichtkaufbar" bedeutet ausverkauft?
(es gibt auch eine Einstellung, bei der man festlegen kann, ob Vaterprodukte generell kaufbar sind oder nicht)

Ich würde bei Varianten auch nach dem Feld oxactive = 1 filtern, dann hast du nur aktive Varianten

Einen Vaterartikel eindeutig zu ermitteln geht nur über das Feld oxparentid der Childs.
Bei einem nicht kaufbaren Vaterartikel ist der Bestand vollkommen egal, da er ignoriert wird.
cya

Ich habe das jetzt als Übung betrachtet. Die Abfragefunktion bringt nun die Varianten deren OXSTOCK darf ja verändert werden. Vaterartikel werden nur selektiert, wenn in den Grundeinstellungen “Vaterartikel kaufbar” angehakt ist:

 public function get_bestand()

 {

 if(!$this->_bestand)

  {
$this->_bestand = oxNew( "oxarticlelist");
      
$sArticleTable = getViewName('oxarticles');
$sCategoryTable = getViewName('oxcategories');

if( !$this->getViewConfig()->isBuyableParent()){
$_snippet = "AND OXID NOT IN (SELECT OXPARENTID FROM ".$sArticleTable." WHERE OXPARENTID != '' GROUP BY OXPARENTID )";
} 
$sSelect  = "SELECT `OXARTNUM` , `OXTITLE` , `OXPRICE` , `OXSTOCK` , `OXACTIVE` , `OXID` , (`OXPARENTID` != '') AS Variante, IFNULL( Kategorie, 'Nicht zugeordnet' ) AS Kategorie
FROM ".$sArticleTable." LEFT JOIN (SELECT `OXOBJECTID` , `OXCATNID` , min( `OXTIME` ) , ".$sCategoryTable.".`OXTITLE` AS `Kategorie`
FROM `oxobject2category`
LEFT JOIN ".$sCategoryTable." ON ".$sCategoryTable.".`OXID` = `oxobject2category`.`OXCATNID`
GROUP BY `OXOBJECTID` ) AS A ON A.OXOBJECTID = ".$sArticleTable.".OXID
WHERE ".$sArticleTable.".OXACTIVE =1 ".$_snippet." 
ORDER BY Kategorie, OXARTNUM";
$this->_bestand->selectString($sSelect); 
 }
return  $this->_bestand->getArray();      
} 
}

Jetzt muss halt die Updatefunktion bei den Varianten das Update der Oxvarstock des Vaterartikels beachten.