webForumDet fria alternativet

Knivig SQL sats att klura på inför helgen

Databaser & SQL

1 svar · 456 visningar · startad av startail

Medlem sedan sep. 2000155 inlägg
Frågan#1

Hej!

Nu har jag ett riktigt knivigt problem för någon som är villig att tänka efter lite granna. Det är inget jätte viktigt, men något jag vill utnyttja på min sida om det går.

Jag hämtar ut butiker beroende på vad stads namn samt omkringliggande städer med postnummer från ursprungsstaden. Nu hämtar jag alla omkringliggande med hjälp av urpsrungsstadens postkod +/- 5000 i postkoden.

Tex om ursprungsstade har 34000 i postkod, hämtas alla runtomkring som har 29000 - 39000. Inte det mest optimala.

Jag vill då, snarare hämta ett max antal butiker, men bara om de är runtomkring. Originalstaden skall hämtas alla av + kanske ca 30 butiker. Dessa 30 skall vara fördelade jämt innan och efter orginalstaden.

Vad jag gör nu är detta:

SELECT store.* FROM store 
WHERE store.postalcity = '" . mb_convert_case($city, MB_CASE_UPPER) . "' 
OR (store.postalcode < '$code_top' AND store.postalcode > '$code_low')
ORDER BY store.name ASC

Jag vill då begränsa det andra "WHERE" påståendet med max 30 resultat, men är det fler resultat där det är samma postnummer skall den tillåta så många som det finns, så inga butiker försvinner av misstag bara för att det blir för många.

Så, att sammanfatta det hela skall det hämtas ut:
1. Alla från store där postalcity = $city
2. Max ~30 butiker från store, fördelade jämt innan och efter orginalstaden.
3. Inkludera fler än 30 om det är av samma postalcode. Tex om vi vill ha 2 st till, men det visar sig att den postalcode vi hämtar sist innebär att det blir 32, tillåt det.

Är detta genomförbart med MySQL 5.1, som jag använder mig av?

Medlem sedan juni 20006 031 inlägg
#2

Flyttas från PHP

245 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)