login  Naam:   Wachtwoord: 
Registreer je!
 Forum

waarde optellen met info uit 2 tabellen

Offline JLT - 17/01/2012 12:26
Avatar van JLTPHP interesse Hoi iedereen!

Inleiding
Ik werk met OsCommerce en heb een module (http://www.oscommerc...tributions,2791) gevonden welke een overzicht per dag laat zien. In dit overzicht is te zien welke producten en hoeveel er daar van verkocht zijn voor die dag. Dit is een handige lijst omdat de mensen in het magazijn zo eenvoudig kunnen zien wat ze moeten pakken

Het probleem
Het script telt keurig alle producten, maar niet de hoeveelheid. Stel ik bestel 3x het zelfde product dan wordt dat product maar een keer doorgegeven.

De database structuur
De orders worden opgedeeld in diverse tabellen. Hieronder een overzicht van de twee belangrijkste, waar de gegevens uitgehaal moeten worden.

Orders
orders_id / customers_id / customers_name / ..... / date_purchased

Orders_products
orders_products_id / orders_id / orders_model /orders_name / ... / products_quantity

De SQL welke nu gebruikt word
$products_query_raw = "select ot.value, sum(ot.value) as dailyvalue, count(distinct o.orders_id) as howmany_orders, o.orders_id, count(distinct op.orders_products_id) as howmany_tickets, op.products_name, op.products_model, op.final_price as ticket_price, op.final_price * count(distinct op.orders_products_id) as howmuch from orders_total ot, orders o, orders_products op where o.date_purchased like \"$date%\" and o.orders_id = op.orders_id and ot.orders_id = op.orders_id and ot.class='ot_total' group by op.products_name";


Ik ben redelijk handig met PHP en een klein beetje met SQL, maar ik zie hier het probleem niet echt. Kan iemand me hierbij helpen of de juiste richting in wijzen.

Natuurlijk weer hartstikke bedankt voor de moeite!

1 antwoord

Gesponsorde links
Offline marten - 03/10/2012 12:14
Avatar van marten Beheerder Wil je de structuur en wat voorbeeld data even geven zodat ik wat gerichter kan kijken welke velden je precies nodig bent. Verder raad ik je aan of veel meer met INNER JOIN te gaan werken zodat je meer rijen direct kan uitsluiten welke je toch niet hebt.

Weet niet of je een DB manager hebt maar voer deze query eens uit met EXPLAIN ervoor:

  1. EXPLAIN select
  2. ot.value, sum(ot.value) as dailyvalue,
  3. count(distinct o.orders_id) as howmany_orders,
  4. o.orders_id,
  5. count(distinct op.orders_products_id) as howmany_tickets,
  6. op.products_name,
  7. op.products_model,
  8. op.final_price as ticket_price,
  9. op.final_price * count(distinct op.orders_products_id) as howmuch
  10. from
  11. orders_total ot, orders o, orders_products op
  12. where
  13. o.date_purchased like \"$date%\"
  14. and
  15. o.orders_id = op.orders_id
  16. and
  17. ot.orders_id = op.orders_id
  18. and
  19. ot.class='ot_total' group by op.products_name


Je krijgt dan een tabel met daarin een uitleg wat er gebeurt. Vermenigvuldig alle getallen welke onder de kolom rows staan met elkaar: Zoveel rijen heeft MySQL nodig om tot een resultaat te komen voor je query. Zorg dat iedere rij zoveel mogelijk bij 1 ligt door bijvoorbeeld indexes te plaatsen.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.189s