Kan noen hjelpe meg med en SQL spørring

Diskusjoner som omhandler databaser og SQL postes her.

Kan noen hjelpe meg med en SQL spørring

Innlegg Torstein » 29.09.2015 20:30

Kan noen forklare meg hvordan jeg kan lage denne spørringen?

må nå ha 3 stk.

Kode: Merk alt
<?php $sql2 = "SELECT * FROM db_pressure GROUP BY DATE(c_datetime)";
    $sql2 = mysql_query($sql2);
    while($ds2  = mysql_fetch_object($sql2)){
        $db2_datetime  = $ds2->c_datetime;

        $converted_date = date("Y-m-d", strtotime($db2_datetime));

        $sql = "select c_holenumber, c_datetime, c_uploaded from db_pressure where date(c_datetime) = '$converted_date' group by c_holenumber";
        $sql = mysql_query($sql);
        while($ds  = mysql_fetch_object($sql)){
            $db_id        = $ds->c_id;
            $db_datetime  = $ds->c_datetime;
            $db_holenumber  = $ds->c_holenumber;
            $db_uploaded  = $ds->c_uploaded;

            $sql3 = "select * from db_pressure_alias where DATE(c_date) = '$converted_date' AND c_holenumber = $db_holenumber";
            $sql3 = mysql_query($sql3);
            $ds3  = mysql_fetch_object($sql3);

            $db3_name  = $ds3->c_name;

            $db_files[] = array("ID" => $db_id, "NAME" => $db_holenumber,  "UPLOADED" => $db_uploaded, "DATETIME" => $db_datetime, "DATE" => $converted_date, "ALIAS" => $db3_name);
        }
    }
<?

Torstein
Medlem
 
Innlegg: 582
Registrert: 24.07.2005 12:17

Re: Kan noen hjelpe meg med en SQL spørring

Innlegg Torstein » 30.09.2015 22:19

Har fått til dette. men hvordan gruppere p.c_datetime også? feks etter dager

Kode: Merk alt
SELECT p . * , pa.c_name
FROM db_pressure AS p
LEFT JOIN db_pressure_alias AS pa ON p.c_holenumber = pa.c_holenumber
WHERE DATE( p.c_datetime ) =  "2015-09-09"
GROUP BY p.c_holenumber
LIMIT 0 , 30
Torstein
Medlem
 
Innlegg: 582
Registrert: 24.07.2005 12:17

Re: Kan noen hjelpe meg med en SQL spørring

Innlegg Torstein » 30.09.2015 22:51

Har nå fått det til:

Kode: Merk alt
SELECT p . * , pa.c_name
FROM db_pressure p
LEFT JOIN db_pressure_alias pa ON p.c_holenumber = pa.c_holenumber
GROUP BY DATE( p.c_datetime ) , p.c_holenumber
ORDER BY  `p`.`c_holenumber` ASC


Problemet er nå at spørringen tar 7 sekunder. Hvorfor?
Torstein
Medlem
 
Innlegg: 582
Registrert: 24.07.2005 12:17

Re: Kan noen hjelpe meg med en SQL spørring

Innlegg Torstein » 30.09.2015 22:58

Fant visst en feil:
Kode: Merk alt
SELECT p. * , pa.c_name
FROM db_pressure p
LEFT JOIN db_pressure_alias pa ON p.c_holenumber = pa.c_holenumber
AND DATE( p.c_datetime ) = pa.c_date
GROUP BY DATE( p.c_datetime ) , p.c_holenumber


men den bruker fortsatt 4 sekunder.

Mens denne tar 0,0000002 sekunder
Kode: Merk alt
SELECT * FROM `db_pressure` group by date(c_datetime), c_holenumber


denne bruker også 0.0000 sekunder:
Kode: Merk alt
SELECT p. * , pa.c_name
FROM db_pressure p
LEFT JOIN db_pressure_alias pa ON p.c_holenumber = pa.c_holenumber
AND DATE( p.c_datetime ) = pa.c_date
Torstein
Medlem
 
Innlegg: 582
Registrert: 24.07.2005 12:17

Re: Kan noen hjelpe meg med en SQL spørring

Innlegg Torstein » 01.10.2015 11:04

Ingen som veit noe om dette? Den ene tabellen er d ca 100 000 rader i. Og den andre er 121 rader. Så de er ikke store
Torstein
Medlem
 
Innlegg: 582
Registrert: 24.07.2005 12:17

Re: Kan noen hjelpe meg med en SQL spørring

Innlegg Fuzzy76 » 03.10.2015 14:23

join med date() tar lang tid. Du bør helst ordne tabellene slik at du slipper kjøre funksjoner når du skal sammenligne dem.

To ting å prøve:

1. Sett EXPLAIN foran spørringen din, og les mysql-dokumentasjonen om hvordan du tolker outputen. Den sier noe om hvordan spørringa utføres.

2. Flytt datovilkåret ut av join'en. Erstatt
Kode: Merk alt
AND DATE( p.c_datetime ) = pa.c_date

med
Kode: Merk alt
WHERE DATE( p.c_datetime ) = pa.c_date
Brukerens avatar
Fuzzy76
Moderator
 
Innlegg: 1266
Registrert: 29.11.2006 11:44
Bosted: Tromsø


Gå til SQL og databaser

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 4 gjester