7
votes

La valeur de la commande et la valeur de commande ne récupère pas correctement dans mysql

J'ai 4 tables.

table_orders p> xxx pré>

table_order_details p> xxx pré>

table_order_status p>

1 200.00 12:12:2015 3 19:42:47 CONFIRM 


4 commentaires

Pouvez-vous montrer un exemple de sortie? Il est probable que la jointure sur table_order_status . Peut-être que vous n'avez besoin que d'obtenir le dernier statut, pas toutes les valeurs intermédiaires


@Alextartan, j'ai eu ton point. Mais j'utilise Max (Status_ID) pour obtenir le dernier statut de cet ordre.


Bien que pas aussi correct, vous pourrait utiliser Sélectionnez Distinct Oo.order_id ... . Ou essayez de rejoindre un sous-sélection de table_order_status déjà regroupé par ordre_id, au lieu de toute la table. Si vous parvenez à configurer un violon SQL ( SQLFIDDLE.com ) Je pouvais jeter un coup d'oeil


Qu'est-ce qui est avec Somme (OD.Product_Sell_Price * OD.Quantitity) comme montant au lieu de OD.Product_sell_price * OD.Quanity en tant que montant ?


4 Réponses :


0
votes

Vous devez concentrer le premier sous-sélection pour obtenir toutes les informations de commande, à l'exception de cet état, puis rejoindre les informations d'état.

Cela pourrait ressembler à ceci: p>

SELECT
    o.order_id AS order_id,
    tosv.value_description AS current_status,
    SUM(od.product_sell_price * od.quantity) AS amount,
    DATE_FORMAT(o.order_datetime, '%d/%m/%Y') AS `date`,
    SUM(od.quantity) AS quantity,
    TIME(o.order_datetime) AS `time`
FROM table_orders AS o
INNER JOIN table_order_status_values AS tosv
    ON o.order_status_id = tosv.value_id
INNER JOIN table_order_details AS od
    ON o.order_id = od.order_id
GROUP BY o.order_id
ORDER BY o.order_id DESC


0 commentaires

2
votes

Vous problème est dans la présente partie: xxx

La somme ne renvoie pas la valeur actuelle car elle se multiplie avec chaque jointure.

Vous pouvez résoudre ce problème. Obtenir cela avec un SELECT au lieu d'utiliser uniquement les colonnes. xxx

et pour la quantité utilisée: xxx

donc le La requête finale sera la suivante: xxx

et il va sortir: xxx

edit - i ont également supprimé le xxx

pas besoin de le joindre à cette requête


0 commentaires

2
votes

Tout d'abord, votre SQL n'est pas valide, MySQL ignore ce SQL non valide mais le résultat ne sera pas ce que vous attendez.

SELECT o.order_id,
    oo.amt,
    DATE_FORMAT(o.order_datetime, '%d/%m/%Y') date,
    oo.qty, 
    TIME(o.order_datetime) time,
    osv.value_desc  
FROM table_orders o, table_order_status_values osv, (
    SELECT order_id, sum(quantity) qty, sum(product_sell_price*quantity) amt
    FROM table_order_details
    GROUP BY 1
) AS oo, (
    SELECT order_id, max(status_id) last_status
    FROM table_order_status
    GROUP BY 1
) AS os
WHERE o.order_id = os.order_id AND os.last_status = osv.status_id
AND o.order_id = oo.order_id


0 commentaires

0
votes

La sous-requête que vous avez utilisée sans groupe en et Sum / max:

1 200 2015:12:12 319:42:47 2


0 commentaires