Meddelande

Minska
No announcement yet.

MySQL fråga

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • MySQL fråga

    Hej,

    Den här sql frågan tynger ner hela vår databas och jag är alltid tvungen att döda processen då någon kör frågan, vet inte hur jag ska optimera den?

    [kod]
    select o.*,c.*,r.name,s.* from orders o inner join (users r,customer c, order_status s) on (r.user_id = o.user_id and o.customer_id = c.customer_id and s.status_id = o.status_id) and r.user_id = ? and c.forname like ?or c.aftername like ? ORDER BY created_at DESC
    [/kod]

    Tacksam för all hjälp ma kan få

    EDIT**
    dit när sql satsen körs kan den se ut så här:

    [kod]
    select o.*,c.*,r.name,s.* from orders o inner join (users r,customer c, order_status s) on (r.user_id = o.user_id and o.customer_id = c.customer_id and s.status_id = o.status_id) and r.user_id = 697 and c.forname like '%Svensson%'or c.aftername like '%Svensson%' ORDER BY created_at DESC
    [/kod]

    verkar som att den går igenom hela dbn och sedan selectar det den behöver?
    J.Kerkinni en grymt bra Mode Blogg

  • #2
    Det ser konstigt ut att du inte har någon WHERE utan låter JOIN ... ON sköta hela selekteringen. Behöver du samtliga kolumner från orders, customer och order_status?
    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

    Kommentera


    • #3
      Tyvärr så behöver jag de men då man kör en LIKE behöver man även då en WHERE? blir helt galen på den här sql satsen, det blir en lock på DBn när den körs
      J.Kerkinni en grymt bra Mode Blogg

      Kommentera


      • #4
        JOIN ... ON används ju bara för att tala om hur de olika tabellerna ska smältas samman, det ska inte användas för selektering. Då är det WHERE som gäller, eller HAVING i vissa fall.

        Funkar det bättre när du lägger in WHERE för selekteringsdelen?
        "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

        Kommentera


        • #5
          Ok så även om jag kör LIKE bör jag köra en WHERE? Just nu använder jag LIKE som selekteringen istället för en WHERE
          J.Kerkinni en grymt bra Mode Blogg

          Kommentera


          • #6
            LIKE används inte istället för WHERE. LIKE används istället för =, <, > eller !=. Du måste fortfarande ha WHERE för att använda LIKE.

            Ex
            Kod:
            SELECT * FROM tabell WHERE kolumn LIKE '%A'
            "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

            Kommentera


            • #7
              Hmm, fast ser inte hur jag ska kunna ha en WHERE i den sql satsen, sökningen som görs är baserat på kundnamn, dvs det är ett fritext fält som man skriver namnet i och sedan slås den upp mot databasen, och namnet skall vara like dvs jag vill ha alla som heter Andersson som resultet och därför har jag LIKE '%Andersson%' ska jag kanske istället ha WHERE namnet istället för LIKE namnet?
              J.Kerkinni en grymt bra Mode Blogg

              Kommentera


              • #8
                Läs vad jag har skrivit. WHERE ska inte ersätta LIKE.

                Testa med
                Kod:
                SELECT
                    o.*,
                    c.*,
                    r.name,
                    s.*
                FROM
                    orders o
                INNER JOIN (
                    users r,
                    customer c,
                    order_status s
                )
                ON (
                    r.user_id = o.user_id
                    AND
                    o.customer_id = c.customer_id
                    AND
                    s.status_id = o.status_id
                )
                WHERE
                    r.user_id = ?
                    AND
                    (c.forname like ? OR c.aftername like ?)
                ORDER BY
                    created_at DESC
                "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

                Kommentera

                Working...
                X