NAVIGATIE

Freetime overzicht
Zoeken


  RUBRIEKEN

FAQ / Help
Wat mag niet?
WZL Wedstrijden
WZL Chat
WZL Toolbar
WZL Statistieken
WZL leden
WZL shop
E-cards

RSS

Fun-feed
Babe-feed
Stud-feed

Een groot aantal pokerrooms geven de mogelijkheid om poker te spelen op internet en geld te storten via het veilige iDeal betaalsysteem.
Overzicht » Computer » Programmeren » SQL/PHP vraag
Onderaan pagina
WishMaster
[mod] 666
Sinds 26/2/2003
T: 99 R: 2018
14/4/2008 - 22:05u | Quote
Onderstaand screenshotje zou het moeten verduidelijken:



http://i27.tinypic.com/9iqxkz.jpg
Bron: © http://i27.tinypic.com/9iqxkz.jpg


Ik heb een tabel (bovenste deel), waarbij 1 batch meerdere keren kan voorkomen, maar dan telkens met een andere test.

Nu zou ik in m'n lay-out graag het onderste deel bekomen: per batch een oplijsting van de testen (die 'ok' worden indien er een datum staat).

Hoe doe ik dit?
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 - R:1581
15/4/2008 - 8:29u | Quote
Denk da ge via een stored procedure ga moeten gaan want ge zult een paar variabelen nodig hebben vooraleer ge zo'n resultaat uitkomt.

Voorbeeld:


DECLARE @Dis VARCHAR(50)
DECLARE @CU VARCHAR(50)
DECLARE @ID VARCHAR(50)

SET @Dis = 'Quicklet - Dissolutie'
SET @CU = 'Quicklet - CU'
SET @ID = 'Quicklet - Id'

SELECT Batch,
CASE WHEN ( (SELECT Datum FROM Tabel WHERE Batch = @Batch AND Prod-Test = @Dis) IS NOT NULL ) THEN ('OK')
ELSE '' END AS Dissolutie
CASE WHEN ( (SELECT Datum FROM Tabel WHERE Batch = @Batch AND Prod-Test = @CU) IS NOT NULL ) THEN ('OK')
ELSE '' END AS CU
CASE WHEN ( (SELECT Datum FROM Tabel WHERE Batch = @Batch AND Prod-Test = @ID) IS NOT NULL ) THEN ('OK')
ELSE '' END AS Id
FROM Tabel


Zo krijgt ge wel een beetje een verwrongen geheel (ge gaat, in uw voorbeeld, 3 lijnen krijgen per batch krijgen met op elke lijn één ingevuld en 2 blanco vakjes) maar da zal wel te omzeilen vallen als ge er wa variabelen inploft en een groepering doet. Andere optie ligt mss in triggers.. Elk lijntje overlopen en testen op doen (wat betreft datum en prod-test) en zo.. Maar da's wel wa meer werk dus ge moet maar roepen als het nie lukt zoals hierboven, dan kijk ik wel eens voor een duidelijk trigger-voorbeeldje
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
15/4/2008 - 18:00u | Quote
Ni ideaal dus...

Ik dacht om eerst een
SELECT DISTINCT Batch from `tabel`
te doen, en dieje prul in een array te steken.
Dan ne "$aantal = count(array)", en da getal gebruiken om ne loop te doen.

for($i=1; $i < $aantal; $i++){
SELECT * WHERE Batch=batch[$i]
}


En dan daarbinnen nog ergens ne loop om alle testen af te gaan. Maar da gaat nogal zwaar worden vrees ik...
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 - R:1581
15/4/2008 - 18:22u | Quote
Da ga idd nie makkelijk worden.. Maar met een distinct gaat ge hier nie veel zijn vrees ik. Die zorgt gewoon da dubbele rijen in uw resultaat weg zijn hé, maar daar moet ge natuurlijk eerst een resultaat voor hebben. Uw manier zal ook wel lukken.. 't ga in ieder geval een deftig queryke worden vrees ik

Edit: zie juist da ge die distinct zou gebruiken om uw batchnummers op te halen. Da is uiteraard wel nuttig, maar dan moet ge nog de rest opgevuld krijgen en daar zit het probleem hem denk ik he

Laatst aangepast door D3ton8oR op 15/04/2008 18:24:29u (1x aangepast)
Wikke 3.2
wzl-lid
Sinds 6/1/2005
T:8 - R:253
15/4/2008 - 18:27u | Quote
Lijkt me een pivot query.

Niet zo simpel om te schrijven, maar uiteindelijk toch de meest robuuste/elegantste oplossing?

anders iets als dit:

SELECT batch,
CASE WHEN Prod-test = 'Quicklet - dissolutie' THEN 'ok' ELSE '' END AS dissolutie,
CASE WHEN Prod-test = 'Quicklet - CU' THEN 'ok' ELSE '' END AS CU,
CASE WHEN Prod-test = 'Quicklet - Id' THEN 'ok' ELSE '' END AS Id
FROM ...

en dan groeperen mbv max() ofzo?
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
15/4/2008 - 19:43u | Quote
Iets gelijk DIT dan?
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 - R:1581
15/4/2008 - 19:48u | Quote
Yep, zoiets als dieje laatste blok idd.. ge gaat enkel nog moeten inbouwen da ge nie de datum (in da voorbeeld de punten dus) in uw resultaat zet, maar "ok" als er een datum is
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
15/4/2008 - 21:13u | Quote
Da spel bolt dus langs geen kanten... constant sql errors

Dit is dus mijn volledige tabel:

PLANNING
http://i29.tinypic.com/24mcd29.jpg
Bron: © http://i29.tinypic.com/24mcd29.jpg



Ik heb ook een tabel waar de combinatie van producten en testen inzit;

TESTS
http://i31.tinypic.com/iqkktw.jpg
Bron: © http://i31.tinypic.com/iqkktw.jpg



Nu is het de bedoeling dat ik via een dropdown eerst 1 product kies waarvan ik wil zien welke testen zijn uitgevoerd.

Stel dat ik 'Quicklet' kies, dan krijg ik dit:
http://i30.tinypic.com/v7r507.jpg
Bron: © http://i30.tinypic.com/v7r507.jpg




Nu zie ik dat er daar momenteel 2 batchen van zijn (8BG5035 en 8CG1010)

Ik wil dan dit bekomen:
http://i31.tinypic.com/2148caq.jpg
Bron: © http://i31.tinypic.com/2148caq.jpg


(als de analyse gestart is: achtergrond geel
als de analyse afgerond is: achtergrond groen
Desnoods gewoon de tekst "gestart" en "OK" en dan in een tooltip de extra info)

Ik hoop dat het een beetje duidelijk is...



---------------------------------


SQL-query:

SELECT Batch,
CASE `Prod-test`
WHEN `Quicklet - Id+Act+Afbr`
THEN AnaStart_Date
WHEN `Quicklet - CU`
THEN AnaStart_Date
WHEN `Quicklet - Dissolutie`
THEN AnaStart_Date
ELSE AnaStart_Who
END "Test", AnaStart_Date
FROM planning
LIMIT 0 , 30

MySQL retourneerde:
#1054 - Unknown column 'Quicklet - Id+Act+Afbr' in 'field list'


Laatst aangepast door WishMaster op 15/04/2008 21:49:44u (2x aangepast)
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 - R:1581
15/4/2008 - 21:18u | Quote
post sql-code + errors eens anders
Phil 2.915
Uberhacker
Sinds 23/2/2003
T:10 - R:484
16/4/2008 - 9:57u | Quote
Domme vraag, maar wat is het aantal (max/verwachte) rijen in je tables ? Mogelijke oplossingen zijn 1) gewoon negeren, en de meest simplistische aanpak gebruiken (indien nodig naar een in-memory of temp tabel gaan), 2) zelf inladen van resultsets in-memory en zelf de linken leggen - resulteert in een minimaal aantal queries, of 3) gaan voor de uber-query, en alles op db niveau afhandelen.

Maar zoals Knuth reeds zei: premature optimization is the root of all evil. Soms moet je gewoon voor de meest simplistische oplossing gaan. Je kan later nog altijd voor een meer performante oplossing gaan moest blijken dat je oplossing niet snel genoeg is, of niet schaalt. Maar dat hangt volledig af van je vereisten ..

My 2 cents
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
16/4/2008 - 18:16u | Quote
aantal lijnen....? euhm... 2.000 à 3.000 denk ik
Maar eigenlijk speelt het weinig rol. Het is een 'proof of concept', als ze zo'n systeem willen, dan moeten ze er maar een eindejaarsstudent op zetten.

edit1: de simpelste oplossing is
SELECT * from planning WHERE `Prod-test` LIKE <geselecteerde product> ORDER BY Date_Due, Batch ASC
dan krijg ik wel 3-4 lijnen met dezelfde batch te zien, met telkens een andere test (ipv 1 lijn/batch met de verschillende testen)

Da moet maar voldoen dan


edit2: het moet voor ni veel dienen, maar had wel leuk geweest (voor mezelf) om een elegante/performante oplossing te vinden/zien

Laatst aangepast door WishMaster op 16/04/2008 18:23:45u (2x aangepast)
Zubzub 2.604
wzl-lid
Sinds 30/7/2005
T:2 - R:176
20/4/2008 - 13:54u | Quote
WishMaster schreef:
aantal lijnen....? euhm... 2.000 à 3.000 denk ik
Maar eigenlijk speelt het weinig rol. Het is een 'proof of concept', als ze zo'n systeem willen, dan moeten ze er maar een eindejaarsstudent op zetten.

edit1: de simpelste oplossing is
SELECT * from planning WHERE `Prod-test` LIKE <geselecteerde product> ORDER BY Date_Due, Batch ASC
dan krijg ik wel 3-4 lijnen met dezelfde batch te zien, met telkens een andere test (ipv 1 lijn/batch met de verschillende testen)


Da moet maar voldoen dan


edit2: het moet voor ni veel dienen, maar had wel leuk geweest (voor mezelf) om een elegante/performante oplossing te vinden/zien

Kijk nekeer hoe joins en cursors werken dan zal het al wa makkelijker worden denk ik
Als ge het ni vindt wil ik het wel es probere oplosse want ik moet da dus ook kunne tegen het einde vant jaar ma ik denk da het eenvoudig op te lossen is adhv ne, ni eens zo moeilijke, query

Laatst aangepast door Zubzub op 20/04/2008 14:04:20u (3x aangepast)
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
20/4/2008 - 20:28u | Quote
probeer maar

Het spel in nen array steken, en dan die array overlopen werkt dus ni... Zijn geheugen is ni groot genoeg precies om da allemaal te onthouden
Zubzub 2.604
wzl-lid
Sinds 30/7/2005
T:2 - R:176
20/4/2008 - 20:30u | Quote
WishMaster schreef:
probeer maar

Het spel in nen array steken, en dan die array overlopen werkt dus ni... Zijn geheugen is ni groot genoeg precies om da allemaal te onthouden


cursor he, dan krijgt ge gewoon telkens de volgende row terug die aan uw query voldoet
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
21/4/2008 - 18:11u | Quote
Google is ni echt hulpvaardig bij 'php cursor' ... Ik krijg alleen zever over hoe de muispijl (cursor) te veranderen met css enzo
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 - R:1581
21/4/2008 - 19:09u | Quote
cursors zijn in SQL he, nie in php.. denk da ge meer succes ga hebben op cursor + sql ^^
WishMaster
[mod] 666
Sinds 26/2/2003
T:99 - R:2018
21/4/2008 - 19:27u | Quote
hehe "oeps"
Net wat van gelezen en ik versta er eigenlijk geen hol van
 
Bovenaan pagina