Benötigen Sie eine SQL-Abfrage zum Aktualisieren von meta_key = ‘_ price’ mit dem Wert in meta_key = ‘_ regulary_price’

Ich weiß nicht, wie viele Produkte so sind, aber ich weiß, dass es viele gibt.

in der db;

Der _regular_price Wert des _regular_price (wc-Produkts) ist höher als der _price Wert. Ich weiß nicht, wie oder wann das passiert ist, aber das Frontend zeigt _price – den niedrigeren der beiden. (Das ist schlecht, wir verlieren Geld)

Ich versuche eine Abfrage auszuführen, die all diese post_id so dass ich sie aktualisieren kann. Ich möchte _price mit dem Wert von _regular_price

Zuerst habe ich das versucht;

 SELECT post_id FROM wp_postmeta WHERE meta_key='_regular_price' > meta_key='_price' 

Dies gibt eine sehr lange Liste von post_id viele Duplikate und nicht immer ein Produkt zurück.

Ich habe dann versucht, eine andere Antwort von Stackexchange anzupassen, die ich mit diesem kam

 SELECT post_id, post_title FROM wp_posts INNER JOIN wp_postmeta ON post_id = post_id WHERE post_type = 'product' AND meta_key='_regular_price' > meta_key='_price' 

Aber ich verstehe den inner join nicht genau und diese Abfrage liefert auch nicht das gewünschte Ergebnis.

Ich glaube, dass ich hier wp_posts & wp_postmeta join muss, weil post_type='product' von wp_posts & meta_key='_regular_price' > meta_key='_price' würde von wp_postmeta gezogen wp_postmeta

könnte es sein, dass meta_key='_regular_price' keine ganze Zahl meta_key='_regular_price' ?

Mein nächster Gedanke war, diese Werte mit einer function zu vergleichen und dann bei Bedarf zu aktualisieren, dh;

 //functions.php add_action( 'after_theme_setup', 'benz_update_wc_meta' ); function benz_update_wc_meta() { global $woocommerce, $post; $reg_price = get_post_meta( get_the_ID(), '_regular_price', true ); $basic_price = get_post_meta( get_the_ID(), '_price', true ); if ( $reg_price > $basic_price ) { update_post_meta( get_the_ID(), '_price', $reg_price ); } } 

oder so ähnlich – aber auch kein Glück.

Lass es mich wissen, wenn du einen Rat hast. Vielen Dank.

Ich habe auch versucht, nachzuspüren

 $reg_price = get_post_meta( get_the_ID(), '_regular_price', true ); 

in den Themenvorlagen woocommerce-Dateien – und dies zeigt den korrekten Preis an, aber wenn Sie das Produkt zum Warenkorb hinzufügen, wird immer noch der falsche Preis verwendet.

Solutions Collecting From Web of "Benötigen Sie eine SQL-Abfrage zum Aktualisieren von meta_key = ‘_ price’ mit dem Wert in meta_key = ‘_ regulary_price’"

Der Grund, warum Ihre Abfrage nichts fruchtbares ergibt, liegt darin, dass Sie nicht den Meta-Wert der beiden Meta-Schlüssel vergleichen, sondern nicht-numerische Ergebnisse von Meta-Schlüssel = “x” und Meta-Schlüssel = “Y”.

 SELECT post_id, post_title FROM wp_posts INNER JOIN wp_postmeta ON post_id = post_id WHERE post_type = 'product' AND meta_key='_regular_price' > meta_key='_price' 

Was Sie tun möchten, ist der Metawert für diese beiden Schlüssel zu vergleichen.

 SELECT price.post_id, r_price, p_price FROM ( SELECT post_id, CAST(meta_value as SIGNED INTEGER) r_price FROM wp_postmeta WHERE meta_key = '_regular_price' ) regular_price, ( SELECT post_id, CAST(meta_value as SIGNED INTEGER) p_price FROM wp_postmeta WHERE meta_key = '_price' ) price WHERE price.post_id = regular_price.post_id and r_price > p_price 

Dies gibt Ihnen jetzt die IDs, nach denen Sie suchen. Am besten durchlaufen Sie die Ergebnismenge und aktualisieren das Post-Meta.