Hoe kan ik deze twee queries combineren (ivm de traagheid?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerard Daniels

Gerard Daniels

31/01/2013 11:31:43
Quote Anchor link
Hoe kan ik deze twee queries combineren (ivm de traagheid meer dan 5000 rows…)?

SELECT p.products_id, p.products_wholesale_price, pd.products_name, p.products_price, l.name, m.manufacturers_name
FROM products p, manufacturers m, products_description pd, languages l
WHERE p.products_id = pd.products_id AND p.products_id = pd.products_id AND l.languages_id = pd.language_id AND m.manufacturers_id = p.manufacturers_id AND pd.language_id = '" . (int)$languages_id . "'
ORDER BY m.manufacturers_name, pd.products_name ASC";

Deze geeft een lijst van alle producten met prijs en naam, gesorteerd op merk


SELECT `qtynew`
FROM `voorraad`
WHERE `product_id` = p.products_id (uit de bovenstaande query)
AND qtynew > '0'
ORDER BY `voorraad_id` desc limit 0,1";

Deze query moet dus de meest recente 'qtynew' pakken die bekend is van een bepaald product_id


De volgende query heb ik in elkaar gezet maar geeft wel resultaten maar pakt niet de meest recente 'qytnew'...

SELECT p.products_id, p.products_wholesale_price, m.manufacturers_name, pd.products_name, p.products_price, v.qtynew
FROM voorraad v, manufacturers m, products p, products_description pd, languages l, voorraad v
WHERE p.products_id = pd.products_id AND v.product_id = p.products_id and p.products_id = pd.products_id and l.languages_id = pd.language_id and m.manufacturers_id = p.manufacturers_id and pd.language_id = '" . (int)$languages_id . "' and v.qtynew > '0'
GROUP BY v.product_id
ORDER BY m.manufacturers_name, pd.products_name, v.voorraad_id ASC";

Ik hoop dat iemand mij verder kan helpen!

Alvast bedankt!
 
PHP hulp

PHP hulp

26/11/2024 04:30:07
 
Joop Slabbekoorn

Joop Slabbekoorn

31/01/2013 12:55:46
Quote Anchor link
hoe zien je databases/tabbellen eruit?

probeer dit eens: mysql_query ("SELECT * FROM 'voorraad' ORDER BY qtynew DESC LIMIT 0,1");
deze pakt de laatste regel qtynew uit tabel voorraad

maar weet niet of je de hele regel moet hebben en hoe je tabel eruit ziet
 
Gerard Daniels

Gerard Daniels

31/01/2013 13:06:55
Quote Anchor link
Zoals je aan mijn twee query's kan zien gaat het hier om 5 verschillende tabellen waar ik gegevens uit haal.
De twee query's die ik heb vermeld, werken alle twee goed. Maar als ik ze in PHP achter elkaar laat uitvoeren, dan kost dat heel veel tijd... en is er regelmatig een timeout.
Ik zoek nu een manier om die twee query's te combineren tot 1 zodat de DB minder belast wordt.
 
Joop Slabbekoorn

Joop Slabbekoorn

31/01/2013 13:08:21
Quote Anchor link
waarom heb je 5 tabbellen?
je kan toch 1 tabel maken met alle info in 1 keer erin
maakt het makkelijker voor jezelf en sneller

5000 rows zeg je??? als je de 5 tabbellen in 1 maakt heb je er 1000 scheelt nogal denk ik zo
Gewijzigd op 31/01/2013 13:13:59 door Joop Slabbekoorn
 
Gerard Daniels

Gerard Daniels

31/01/2013 13:16:48
Quote Anchor link
Een voorraadtabel (incl, geschiedenis) kan je niet in een producttabel plaatsen, dat gaat gewoon niet... en een lijst met merknamen ook niet.
Maar al deze tabellen zijn wel gerelateerd aan elkaar middels bijvoorbeeld een product_ID of merk_ID.
 
Joop Slabbekoorn

Joop Slabbekoorn

31/01/2013 13:22:48
Quote Anchor link
hoe zien je tabbellen eruit dan?
je kan gewoon meerdere query's uitvoeren achter elkaar.
weet niet hoe je het allemaal op je pagina zet?
maar kun je voor het overzicht niet beter om te beginnen
vars gebruiken?
Gewijzigd op 31/01/2013 13:38:49 door Joop Slabbekoorn
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

31/01/2013 13:38:20
Quote Anchor link
Staat er in de voorraad tabel ook een datum?
Dan kan je dit doen (ingekort)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT p.product_id, v.qtynew, MAX(v.ch_date) chdate
FROM products
JOIN voorraad ON p.product_id AND qtynew > 0
GROUP BY p.product_id, v.qtynew HAVING v.ch_date = chdate
 
Gerard Daniels

Gerard Daniels

31/01/2013 15:02:32
Quote Anchor link
Er is geen datum in de voorraad tabel maar wel een uniek, oplopend ID (voorraad_id).
Ik ga eens met jouw code aan de slag, want ik neem aan dat die MAX ook werkt met een ID...
Bedankt!

Toevoeging op 31/01/2013 17:12:13:

Ik kwam op het volgende (maar geeft een foutmelding "invalid use of group function)

SELECT MAX(voorraad_id) vID, p.products_id, p.products_wholesale_price, m.manufacturers_name, pd.products_name, p.products_price, v.qtynew
FROM manufacturers m, products p, products_description pd, languages l, voorraad v
WHERE v.voorraad_id = MAX(voorraad_id) AND p.products_id = pd.products_id AND v.product_id = p.products_id and p.products_id = pd.products_id and l.languages_id = pd.language_id and m.manufacturers_id = p.manufacturers_id and pd.language_id = '" . (int)$languages_id . "' and v.qtynew > '0' AND p.products_id = v.product_id AND v.product_id = p.products_id
GROUP BY v.product_id
ORDER BY m.manufacturers_name, pd.products_name, v.voorraad_id ASC
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.