Query probleem (4 punten)

Gestart doorVince19 reacties149 weergaven

20 berichten · pagina 1 van 2

Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Weet iemand hoe ik 2 of meer dingen kan selecteren?

Dus in deze:

SELECT
    p.*,
    (
        SELECT
            MIN(price)
        FROM
            products
        WHERE
            ean = p.ean
    ) AS minPrice
FROM
    products AS p
WHERE
    ".$where."
GROUP BY
    p.ean


Als ik bijvoorbeeld ook nog max(price) en id oid wil ophalen?

Luuk zei al met 2 querys, maar volgens mij is dat niet nodig en nogal onhandig (wil misschien wel 5 dingen selecteren where ean = p.ean en name = p.name) en ik zit met nog een probleem.

$sql = "SELECT p.*,( SELECT MIN(price) FROM products WHERE ean = p.ean || name = p.name) AS minPrice FROM `products` AS p WHERE ".$where." GROUP BY p.ean";

Bovenstaande query is super traag, door de || (OR). Als ik alleen ean = p.ean, of name = p.name doe is die super snel. (0.01 sec), deze duurt maarliefst 11 seconden. Is hier niet iets op te verzinnen, met een case oid. Hij doet wel wat die moet doen, maar 11 sec slaat nergens op. Het ligt dus niet aan de name, als ik alleen name zoek is die er ook direct. Een dubbele index op ean & name heeft ook weinig effect. (1sec winst)

3,80 pt voor wie me kan helpen!

Ik heb een nogal irritant probleem, ik kom er zelf ook echt niet uit. Ik heb deze query..

SELECT * , (SELECT MIN( price) AS minPrice from products where ean = ean van dit product, die geselecteerd is bij het *) FROM `products` WHERE ".$where." GROUP BY ean

Dik gedrukt is natuurlijk een voorbeeld, dat moet daar komen.

Uiteraard een vergoeding als je me kan helpen, tot 4 pt.

Thx. smile
0
Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
SELECT * , (SELECT MIN( price) AS minPrice from products where ean = ean van dit product, die geselecteerd is bij het *) FROM `products` WHERE ".$where." GROUP BY ean;


wat is de foutcode?
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Nou, ik weet ook niet precies hoe ik die eerste ean aanroep.

SELECT * , (SELECT MIN( price) AS minPrice from products where ean =???) FROM `products` WHERE ".$where." GROUP BY ean
0
Berichten
4.912
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
$qeury = mysql_query("ELECT * , (SELECT MIN( price) AS minPrice from products where ean = ean van dit product, die geselecteerd is bij het *) FROM `products` WHERE ".$where." GROUP BY ean");


on zo ophalen!

$row = mysql_fetch_array($qeury);
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Je begrijpt het niet helemaal volgens mij, kan iemand anders even meedenken? clown
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
SELECT
    p.*,
    (
        SELECT
            MIN(price)
        FROM
            products
        WHERE
            ean = p.ean
    ) AS minPrice
FROM
    products AS p
WHERE
    ".$where."
GROUP BY
    p.ean
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
@Luuk; is het dan niet

SELECT
    p.*,
    (
        SELECT
            MIN(price)
        FROM
            products d
        WHERE
            d.ean = p.ean
    ) AS minPrice
FROM
    products AS p
WHERE
    ".$where."
GROUP BY
    p.ean


of hoeft dat niet daarin?
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hoeft niet, mag wel
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik zal morgen even wat naar je overmaken Luuk, ook jij bedankt Sjoerd.

Gebruik nu die van Luuk en werkt prima, nogmaals bedankt! smile
Nog even een andere vraag, ook hiervoor geef ik graag een vergoeding!

$sql = "SELECT p.*,( SELECT MIN(price) FROM products WHERE ean = p.ean || name = p.name) AS minPrice FROM `products` AS p WHERE ".$where." GROUP BY p.ean";

1. Stel ik wil bijv. ook nog MAX(price) AS maxPrice, hoe doe ik dat dan in dezelfde query? Aangezien er ook AS minPrice achter staat. (voor FROM.)

2. Bovenstaande query is super traag, door de || (OR). Als ik alleen ean = p.ean, of name = p.name doe is die super snel. (0.01 sec), deze duurt maarliefst 11 seconden. Is hier niet iets op te verzinnen, met een case oid. Hij doet wel wat die moet doen, maar 11 sec slaat nergens op. Het ligt dus niet aan de name, als ik alleen name zoek is die er ook direct.

Alvast bedankt,

wie me hiermee kan helpen is echt een held en zal beloond worden. worshippy
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Nog even een andere vraag, ook hiervoor geef ik graag een vergoeding!

$sql = "SELECT p.*,( SELECT MIN(price) FROM products WHERE ean = p.ean || name = p.name) AS minPrice FROM `products` AS p WHERE ".$where." GROUP BY p.ean";

1. Stel ik wil bijv. ook nog MAX(price) AS maxPrice, hoe doe ik dat dan in dezelfde query? Aangezien er ook AS minPrice achter staat. (voor FROM.)

2. Bovenstaande query is super traag, door de || (OR). Als ik alleen ean = p.ean, of name = p.name doe is die super snel. (0.01 sec), deze duurt maarliefst 11 seconden. Is hier niet iets op te verzinnen, met een case oid. Hij doet wel wat die moet doen, maar 11 sec slaat nergens op. Het ligt dus niet aan de name, als ik alleen name zoek is die er ook direct.

Alvast bedankt,

wie me hiermee kan helpen is echt een held en zal beloond worden. worshippy
*sorry dubbelpost
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Vince schreef:
1. Stel ik wil bijv. ook nog MAX(price) AS maxPrice, hoe doe ik dat dan in dezelfde query? Aangezien er ook AS minPrice achter staat. (voor FROM.)
SELECT
    p.*,
    (
        SELECT
            MIN(price)
        FROM
            products
        WHERE
            ean = p.ean
        OR
            name = p.name
    ) AS minPrice,
    (
        SELECT
            MAX(price)
        FROM
            products
        WHERE
            ean = p.ean
        OR
            name = p.name
    ) AS maxPrice
FROM
    products AS p
WHERE
    ".$where."
GROUP BY
    p.ean
Vince schreef:
2. Bovenstaande query is super traag, door de || (OR). Als ik alleen ean = p.ean, of name = p.name doe is die super snel. (0.01 sec), deze duurt maarliefst 11 seconden. Is hier niet iets op te verzinnen, met een case oid. Hij doet wel wat die moet doen, maar 11 sec slaat nergens op. Het ligt dus niet aan de name, als ik alleen name zoek is die er ook direct.
Ik zou 1 subquery (aparte query tussen de haakjes) naar ean laten kijken en 1 naar name. Dan kun je met een min() of max() php functie de kleinste of grootste van die 2 pakken
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hoe ziet de query er dan uit?

Bedankt maak vanmiddag punten over, nu op ipod...

Het is wel de bedoeling dat het gecombineerd word, dus hij zoekt name en ean en pakt daar de laagste en hoogste van. Niet appart voor allebei, dat je er 4 hebt.
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Ik zou ook een index aanmaken op ean en name (1 index op die 2, dus niet 2 aparte).
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Zal ik doen straks . smile
En Luuk die query die je hierboven hebt geplaatst, ik wil wel 5 dingen selecteren (bij where name or ean) oid niet alleen min,max . 5 losse querys lijkt me dan wat veel of niet?
0
Vince

Lid · Topicstarter

Berichten
1.028
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Weet iemand hoe ik 2 of meer dingen kan selecteren?

Dus in deze:

SELECT
    p.*,
    (
        SELECT
            MIN(price)
        FROM
            products
        WHERE
            ean = p.ean
    ) AS minPrice
FROM
    products AS p
WHERE
    ".$where."
GROUP BY
    p.ean


Als ik bijvoorbeeld ook nog max(price) en id oid wil ophalen?

Luuk zei al met 2 querys, maar volgens mij is dat niet nodig en nogal onhandig (wil misschien wel 5 dingen selecteren where ean = p.ean en name = p.name) en ik zit met nog een probleem.

$sql = "SELECT p.*,( SELECT MIN(price) FROM products WHERE ean = p.ean || name = p.name) AS minPrice FROM `products` AS p WHERE ".$where." GROUP BY p.ean";

Bovenstaande query is super traag, door de || (OR). Als ik alleen ean = p.ean, of name = p.name doe is die super snel. (0.01 sec), deze duurt maarliefst 11 seconden. Is hier niet iets op te verzinnen, met een case oid. Hij doet wel wat die moet doen, maar 11 sec slaat nergens op. Het ligt dus niet aan de name, als ik alleen name zoek is die er ook direct. Een dubbele index op ean & name heeft ook weinig effect. (1sec winst)

2 pt of 2 euro pp voor wie me kan helpen met beide. smile
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren