saturdayMedlem sedan jan. 2007191 inlägg
Hej!
Jag har ett bekymmer jag behöver hjälp med. Jag ska ta in butiksfakta för en butikskedja med deras anställda i en MySql databas. Arbetar med MySql (5.5.30-cll-lve) och PhpMyAdmin.
Jag har därför skapat en tabell som har alla fakta kring en person jag behöver och därefter en tabell som innehåller butiksnummer och antal anställda i den butiken.
Jag har skickat ett exel-fil till företaget som de ska fylla i. Se skärmdump nedan (som bara innehåller exempeldata just nu).
Fältet "madeit" i persontabellen innehåller "1" eller "0" beroende på om den anställde har uppfyllt en sak.
När jag gör om Exel-dokumentet till CSV och sedan importerar det till tabellerna ska de flesta värdena i persontabellen, men när det gäller storeid så ska varje storeid räknas (count) och stoppas in i butikstabellen med "storenum" en gång och count som "employees". Hur kan jag göra det?
För presentationen av datan behöver jag göra följande:
1 Plocka varje unikt storeid från persontabellen
2 Räkna hur många gånger varje storeid finns där ”madeit” är lika med 1.
3 Jämför det "count" med ”Employees”-numret i butikstabellen
4 Om det överensstämmer plocka upp det i loopen och skriv ut data i HTML(Php-scriptet har jag kontroll på)
Det är alltså SQL-strängarna jag är ute efter för import och presentation.
Någon som känner sig manad och sjukt vass på SQL och vill hjälpa mig med hur jag ska gå tillväga? Hojta till om något är oklart!
Ps. Är medveten om att "persontabellen" kan brytas ned till fler tabeller för att optimera ännu mer, men nu är det vad det är. :)
Vore oerhört tacksam för hjälp!
saturdayMedlem sedan jan. 2007191 inlägg
Jag har lurat ut att denna sträng plockar ut och kollar hur många "madeit" det är per "storeid" från person/employees-tabellen:
SELECT storeid, count(madeit) FROM employees WHERE madeit = 1 GROUP BY storeid
Men nu behöver jag kolla om counten stämmer med fältet "employees" i butikstabellen och loopa ut dem som överensstämmer.
nitro2k01Medlem sedan aug. 20037 630 inlägg
SELECT s.id as storeid, s.employees as employees, count(e.madeit) as madeitcount
FROM stores s
LEFT JOIN employees e ON e.storeid = s.id
WHERE e.madeit = 1
GROUP BY s.id
Du vill nog inte filtrera ut vilka affärer som stämmer redan i frågan, men om du vill det måste du gör det med HAVING i denna fråga, eftersom det evalueras efter GROUP, till skillnad från WHERE. Frågan nedan bör ge dig alla affärer där värdet stämmer.
SELECT s.id as storeid, s.employees as employees, count(e.madeit) as madeitcount
FROM stores s
LEFT JOIN employees e ON e.storeid = s.id
WHERE e.madeit = 1
GROUP BY s.id
HAVING s.employees = count(e.madeit)
saturdayMedlem sedan jan. 2007191 inlägg
Fy tusan så vasst! Fungerade klockrent! DU(!) gjorde min dag. :)
nitro2k01 skrev:
SELECT s.id as storeid, s.employees as employees, count(e.madeit) as madeitcount
FROM stores s
LEFT JOIN employees e ON e.storeid = s.id
WHERE e.madeit = 1
GROUP BY s.id
Du vill nog inte filtrera ut vilka affärer som stämmer redan i frågan, men om du vill det måste du gör det med HAVING i denna fråga, eftersom det evalueras efter GROUP, till skillnad från WHERE. Frågan nedan bör ge dig alla affärer där värdet stämmer.
SELECT s.id as storeid, s.employees as employees, count(e.madeit) as madeitcount
FROM stores s
LEFT JOIN employees e ON e.storeid = s.id
WHERE e.madeit = 1
GROUP BY s.id
HAVING s.employees = count(e.madeit)
nitro2k01Medlem sedan aug. 20037 630 inlägg
Vassego. Du får gärna klicka på länken "markera som lösning" ovanför mitt inlägg. :)