2013-02-28 3 views
-1

J'ai 2 tables: user_values et decrease_times.Valeur de réduction Mysql d'une autre table

user_values a 3 colonnes: username, property, value et decrease_times a 3 colonnes: property, decrease_value, decrease_time. Tout cela est dynamique et change beaucoup.

J'ai une tâche cron qui est appelé toutes les heures, et ce que je veux faire est de réduire toutes les lignes de valueuser_values avec la quantité stockée dans decrease_value si property de user_values est égale à property de decrease_times.

En outre, decrease_time peut être 0 ou 1, 0 signifie qu'il devrait diminuer toutes les heures, et 1 signifie qu'il devrait diminuer toutes les 24 heures. J'ai déjà implémenté une if-clause qui détecte si c'est 6h du matin, et puis il devrait diminuer toutes les valeurs si elles sont 1 ou 0.

Quelle requête dois-je faire pour faire ceci? En outre, ceci est fait en PHP.

Edit: Ce que je l'ai fait jusqu'à présent est la suivante: UPDATE user_values SET value = value - (SELECT decrease_value FROM decrease_times WHERE property=/* property from UPDATE clase should be here */) WHERE property=(SELECT property FROM decrease_times WHERE decrease_time=0)

Répondre

2

Vous n'avez pas besoin d'utiliser une instruction select partout ...

UPDATE user_values AS values 
INNER JOIN decrease_times AS times ON values.property = times.property 
SET values.value = values.value-times.decrease_value 
WHERE values.property = times.property AND times.decrease_time = 0 

vous prenez votre table que vous cherchez à modifier, et pour se joindre à la requête avec la deuxième table ... vous définissez le champ de valeur sur votre table user_values ​​en utilisant l'équation simple mathématiques vous n eed, et assurez-vous que les valeurs de propriété sont identiques et que vous mettez à jour uniquement les lignes qui doivent être mises à jour toutes les heures.

Votre version quotidienne serait le même, mais ne serait pas nécessaire « et ... » partir

+0

Merci, je ne savais pas à propos de ces clés. Cela a fonctionné – Pacha

-1

quelque chose comme ça UPDATE TABLE SET your_value=(your_value-1) WHERE USERID=5

ou

UPDATE TABLE1 SET your_value=(your_value +(SELECT your_value2+5 FROM TABLE2 WHERE USERID=5)) WHERE USERID=5

- l'adapter à vos besoins; c'est la syntaxe SQL de base.

Besoin de meilleur exemple et votre structure de table - vous pouvez utiliser http://sqlfiddle.com/ et de recréer certaines de vos tables/données afin que nous puissions jouer avec

http://www.w3schools.com/sql/sql_update.asp

+0

Cela ne nous aide pas trop car je ne veux pas réduire ma valeur par un, mais par la montant dans un autre tableau. – Pacha

+0

Puis sélectionnez votre autre table dans la clause UPDATE – Andrew

+0

La structure de la table est toute tracée ... il n'est pas nécessaire d'expliquer mieux que @Pacha. Pour commencer la Table n'est pas TABLE1, c'est user_values ​​... – niaccurshi

Questions connexes