Vinnaren i pepparkakshustävlingen!
2009-06-22, 13:42
  #1
Medlem
zizacons avatar
Försöker jämföra två ganska lika tabeller i en databas där den nya tabellen (nytabell) innehåller de nya produkter som kommit till plus samma produkter som "gammaltabell". Jag vill alltså automatiskt få fram vilka som är nya och lista dessa. Den relevanta koden ser ni nedan.

Problemet är att det är 20-25 000 listade produkter i varje tabell och det verkar enormt tungt. Koden är med all säkerhet rätt kass då jag är relativt ny på detta så jag hoppas ni kan hjälpa mig att trimma den lite eller lösa problemet på något bättre sätt.

Citera
2009-06-24, 10:23
  #2
Medlem
thejs avatar
Om du bara skall använda datan temporärt och jobba med den rekommenderar jag MySQL HEAP (Memory) tabeller, då dessa ligger i minnet och är extremt snabba att arbeta med.

Länk med info:

Ps. har inte läst allt du skrev, bara skummade lite, verkade relevant i alla fall
Citera
2009-08-11, 10:55
  #3
Medlem
Citat:
Ursprungligen postat av zizacon
Försöker jämföra två ganska lika tabeller i en databas där den nya tabellen (nytabell) innehåller de nya produkter som kommit till plus samma produkter som "gammaltabell". Jag vill alltså automatiskt få fram vilka som är nya och lista dessa. Den relevanta koden ser ni nedan.

Problemet är att det är 20-25 000 listade produkter i varje tabell och det verkar enormt tungt. Koden är med all säkerhet rätt kass då jag är relativt ny på detta så jag hoppas ni kan hjälpa mig att trimma den lite eller lösa problemet på något bättre sätt.


Problemet är att du låter PHP göra något som MySQL borde göra. Vad du gör är att du ger ALLA rader från båda tabellerna till PHP och ber PHP loopa igenom dem och pillra bort alla som är NULL i gammaltabell.text2.

Om du istället lägger till detta i frågan:

Kod:
SELECT nytabell.text
FROM nytabell
LEFT JOIN gammaltabell
ON nytabell.text = gammaltabell.text2
WHERE gammaltabell.text2 IS NULL

Så kommer MySQL enbart ge PHP de rader ur nytabell.text där det inte finns någon matchande rad i gammaltabell, d.v.s. enbart de nya produkterna. Därefter kan du enkelt låta PHP loopa igenom alla rader som returneras så har du listat alla nya produkter.
Citera
2009-08-11, 11:05
  #4
Medlem
Wobins avatar
Personligen hade jag använt mig av ett fält på din produkttabell som anger om produkten är ny eller gammal istället för att använda två tabeller.
Känns som en mycket enklare lösning.
Citera
2009-08-13, 13:56
  #5
Medlem
Databasnörds avatar
Du kan ha en kolumn med datum när produkten lades till. Indexera denna kolumn så går sökningar snabbare.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback