Autor Zpráva
tomas2245
Profil
Zdravím, vedel by mi niekto pomôcť s týmto kódom?

Chcel by som aby mi to spočítalo stĺpec celkova_cena
pri tých zákazníkoch, ktorí majú objednávku vytvorenú od dátumu 31.05.2024 až do dátumu 06.06.2024
a zároveň aj keď sa nájde zákazník s takým dátumom a náhodou by mal objednávku ešte ďalšiu pred týmto dátumom, napr. v roku 2023 tak aby toho konkrétneho zákazníka nezarátalo do sčítania tej celkovej ceny

Mám spravený tento kód ktorý funguje ale ráta mi tam aj tie objednávky z minulých rokov do toho... skúšal som aj pomocou umelej inteligencie ale nevedela mi pomôcť úplne :D

Nemám na stránke registrácie kvôli jednoduchosti objednávania, čiže potrebujem aby tam bola len kontrola pomocou rovnakého mena, priezviska a mesta

A túto štatistiku chcem aby som vedel koľko mi to zarobilo na reklamách z FB a IG pri nových zákaznikoch, ktorí ešte nemali objednávku na základe mena, priezviska a mesta

$datumod a $datumdo je len na ukážku, reálne si dátumy mením pomocou inputov

zvýraznená časť kódu bude zrejme súvisieť s tým čo potrebujem, len mi už nenapadá ako to zmeniť aby to správne rátalo bez tých objednávok pred tým dátumom ktorý si zvolím

kód:

$datumod = '2024-05-31';
$datumdo = '2024-06-06';

$dotaz = mysqli_query($pripoj,"
    SELECT SUM(celkova_cena) AS celkova_cena 
    FROM (
        SELECT oz.meno, oz.priezvisko, oz.mesto, oc.celkova_cena
        FROM objednavky_info oi 
        JOIN objednavky_zakaznik oz ON oi.zakaznik_id = oz.id
        JOIN objednavky_cena oc ON oi.id = oc.objednavka_id 
        WHERE oi.vytvorena >= '$ostatne_reklamy_datum_od 00:00:00'
          AND oi.vytvorena < '$ostatne_reklamy_datum_do 23:59:59'
          AND (oz.odkial_ste_sa_o_nas_dozvedeli = 'facebook' OR oz.odkial_ste_sa_o_nas_dozvedeli = 'instagram')
          AND NOT EXISTS (
              SELECT 1
              FROM objednavky_info oi2 
              WHERE oi2.zakaznik_id = oz.id
                AND oi2.vytvorena < '$ostatne_reklamy_datum_od 00:00:00'
          )
    ) AS subquery
");

$dotaz2 = mysqli_fetch_assoc($dotaz);
Kajman
Profil
To označené zkuste zaměnit za
AND NOT EXISTS (
              SELECT 1
              FROM objednavky_info oi2
              JOIN objednavky_zakaznik oz2 ON oi2.zakaznik_id = oz2.id
              WHERE oz2.meno = oz.meno
                AND oz2.priezvisko= oz.priezvisko
                AND oz2.mesto= oz.mesto
                AND oi2.vytvorena < '$ostatne_reklamy_datum_od 00:00:00'
          )

Případně by to šlo napsat nějak takto
SELECT Sum(soucet_zakaznika) soucet_celkem
FROM   (SELECT oz.meno,
               oz.priezvisko,
               oz.mesto,
               Sum(oc.celkova_cena) soucet_zakaznika
        FROM   objednavky_info oi
               JOIN objednavky_zakaznik oz
                 ON oi.zakaznik_id = oz.id
               JOIN objednavky_cena oc
                 ON oi.id = oc.objednavka_id
        WHERE  oi.vytvorena <= '$ostatne_reklamy_datum_do 23:59:59'
               AND oz.odkial_ste_sa_o_nas_dozvedeli IN ( 'facebook', 'instagram' )
        GROUP  BY oz.meno,
                  oz.priezvisko,
                  oz.mesto
        HAVING Min(oi.vytvorena) >= '$ostatne_reklamy_datum_od 00:00:00') subquery  

V obou případech pomůže jeden vícesloupcový index např. (mesto, prizvisko, meno) nad tabulkou zákazníků.

A možná do součtu nebudete chtít započítávat dopravu atp., pokud tam nemáte přirážku.
tomas2245
Profil
ďakujem veľmi pekne!
už dávnejšie ste mi viac krát pomohol, ste veľký pán programátor :)
použil som prvé riešenie a už mi to konečne funguje :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0