Bonjour,
je cherche à obtenir la moyenne des notes (colonne 'rate') du tableau piwigo_rate concernant un même objet (element_id) par exemple l'élement n°880 qui a eu deux votes, et différents.
pour pouvoir mettre à jour la moyenne figurant dans la table piwigo-images, dans la colonne 'rating_score' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MariaDB [piwigo]> SELECT * FROM piwigo_rate; +---------+------------+----------------+------+------------+ | user_id | element_id | anonymous_id | rate | date | +---------+------------+----------------+------+------------+ | 2 | 911 | 77.136.67 | 4 | 2024-01-14 | | 1 | 911 | 77.136.66 | 4 | 2024-02-17 | | 1 | 152 | 77.136.67 | 4 | 2024-09-02 | | 1 | 469 | 77.136.67 | 3 | 2024-09-03 | | 2 | 469 | 77.136.67 | 3 | 2024-09-03 | | 2 | 1070 | 91.151.115.234 | 4 | 2024-09-16 | | 2 | 3854 | 91.151.115.234 | 4 | 2024-09-16 | | 2 | 880 | 91.151.115.234 | 4 | 2024-09-16 | | 1 | 880 | 91.151.115 | 2 | 2024-09-16 | +---------+------------+----------------+------+------------+
Par ce moyen, je cherche en effet à attribuer, par un site externe, des notes à des images stockées sur Piwigo, en émulant la fonctionnalité interne de ce CMS : d'abord j'ajoute une note, et après j'inscris la moyenne quelque part.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MariaDB [piwigo]> select * from piwigo_images where id='1070'; +------+----------------+---------------------+---------------------+-----------+---------------------+-----------+-----+----------+-------+--------+------+--------------------+----------------------+--------------+-------------------------------------------------+---------------------+-------+----------------------------------+----------+----------+-----------+-----------+---------------------+ | id | file | date_available | date_creation | name | comment | author | hit | filesize | width | height | coi | representative_ext | date_metadata_update | rating_score | path | storage_category_id | level | md5sum | added_by | rotation | latitude | longitude | lastmodified | +------+----------------+---------------------+---------------------+-----------+---------------------+-----------+-----+----------+-------+--------+------+--------------------+----------------------+--------------+-------------------------------------------------+---------------------+-------+----------------------------------+----------+----------+-----------+-----------+---------------------+ | 1070 | DSCF3166-1.jpg | 2022-05-01 17:30:54 | 2019-06-25 00:26:00 | Le Trayas | Massif de l Esterel | Vincent D | 935 | 574 | 1800 | 1350 | NULL | NULL | 2022-05-01 | 3.73 | ./upload/2022/05/01/20220501173054-c019e69f.jpg | NULL | 0 | c019e69f003ffa0c2ff355ce5af93738 | 1 | 0 | 43.468618 | 6.923180 | 2024-09-16 16:53:04 | +------+----------------+---------------------+---------------------+-----------+---------------------+-----------+-----+----------+-------+--------+------+--------------------+----------------------+--------------+-------------------------------------------------+---------------------+-------+----------------------------------+----------+----------+-----------+-----------+---------------------+
J'opère par PHP.
Ce code est loin de faire les opérations de moyenne (chiffre 4 par défaut).. mais il réussit à inserer des votes dans piwigo_rate
Comment faire ? merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php include ("dbconfig.php"); if(!isset($_SESSION)) { session_start(); }; error_reporting(E_ALL); ini_set("display_errors", 1); header("Access-Control-Allow-Origin: *"); $dbcon7 = new mysqli($myshost, $mysuser, $myspass, 'piwigo'); $commentcontent = filter_var($_GET['commentcontent'], FILTER_UNSAFE_RAW); $commentphoto = filter_var($_GET['commentphoto'], FILTER_UNSAFE_RAW); $visitorip = $_SESSION['visitorip']; $sql8 = "INSERT INTO piwigo_rate (user_id, date, element_id, anonymous_id, rate) VALUES ('2',CURDATE(), '$commentphoto', '$visitorip', '$commentcontent')"; $stmt6 = $dbcon7 -> prepare($sql8); $stmt6-> execute(); $sql9 = "UPDATE piwigo_images SET rating_score = '4' WHERE id = $commentphoto"; $stmt7 = $dbcon7 -> prepare($sql9); $stmt7-> execute(); $dbcon7-> close(); ?>
Mon autre tentative ne va pas être bonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 UPDATE piwigo_images P SET rate = SELECT AVG(rate) FROM piwigo_rate WHERE id = $commentphoto
Partager