Gå til innhold

[Løst] låsing av rad i mysql tabell


Anbefalte innlegg

Da jeg fikk god hjelp til å finne fram en løsning på mitt forrige problem siste gang jeg spurte her, så prøver jeg igjen.

 

Jeg har en tabell med kunde data (navn, adresse, telefonnummer osv) bygd opp på følgende måte:

| ID | KUNDENUMMER | NAVN |(flere felt her, gidder ikke å skrive opp alle)| VISNING      |
|  1 | 12345678901 | navn | (diverse data som angitt ovenfor.             | set('j','n') |

 

Det jeg prøver å oppnå er følgende:

1. Når ID 1 blir vist hos en selger, skal ikke den samme kunne komme opp hos noen andre. Spørringen mot databasen er derfor satt opp slik at den skal ikke inkludere de radene der VISNING er satt til 'j'.

2. Man skal få opp en tilfeldig kunde fra databasen og dersom man har hatt kunden på skjermen tidligere, men trykt en kode, så skal ikke denne kunden komme opp på skjermen før tidligst dagen etter.

 

Så langt har jeg prøvd meg med denne koden:

$antal = mysql_query("SELECT COUNT(id) FROM tabell WHERE fredet='N' AND visning='N'")
or die("Antall spørring feilet. " . mysql_error());
$antall = mysql_fetch_row($antal);

$tilfeldig = rand(1, $antall[0]);

 

før man i en ny spørring på visningssiden (data blir submittet via POST), kommer kunden opp selv om visning er satt til 'n'.

 

 

Er det noen bedre måte å tilfeldiggjøre utplukket av kunder, men samtidlig begrense det til å ikke inkludere id hvor VISNING er 'n'?

 

Jeg har sett litt på mysql sin egen rand() funksjon, men denne skal visstnok være "treg". Med et begrenset antall brukere holder det nok, et problem er at det på sikt vil være snakk om potensielt tusenvis av samtidige brukere.

Lenke til kommentar
Videoannonse
Annonse

Hva med å gjøre om feltet 'VISNING' til en datetime/timestamp som ikke bare forteller at raden er vist, men også når den ble vist? da kan du gjør no sånn som: Select Blah From Kunde Where visning + timer > Now()? Mysql har en rekke datofunksjoner som kan brukes. DATE_ADD f.eks. ( http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html ) deretter kan du plukke tilfeldig fra dette utvalget.

Lenke til kommentar

deretter kan du plukke tilfeldig fra dette utvalget.

 

Jeg ser hvor du vil hen, men er litt uenig i type felt. Alternativet jeg ser er å bruke 'tall-kode' hvor 1 = kan vises, 2 = skal ikke vises, 3 = salg osv.

 

Dersom man skal plukke tilfeldig fra utvalget som gjenstår når datetime/timestamp?

Har du noen tips også til hvordan man kan plukke en tilfeldig 'ID' fra det filtrerte resultatet?

Er jeg inne på noe ved å plassere resultatet av 'ID' (filtrert resultat) i ett Array, telle hvor mange keys det er i Arrayet for så å plukke ett tilfeldig tall fra resultatet?

 

Jeg må nok sannsynligvis også inn med et ekstra felt uansett, da man ved salg til kunden ikke skal få opp denne igjen før etter et visst tidsperspektiv.

Lenke til kommentar

Tilfeldig utvalg kan du vel gjøre på dbsiden med Rand() eller på klienten med php. Nå er ikke php det jeg bruker ofte, men array_rand ser ut til å kunne gjøre det du vil. Godt mulig du må inn med flere felt i db ja, men jeg ser ikke åssen du skal kunne si at noe skal låses opp etter en viss tid uten å lagre tiden i db. Det er vel ganske vanlig å lagre salg(ordrer) i egen tabell med en ordrelinjetabell som kobler kunde og ordre sammen. Da er det naturlig å legge tidspunktet for salget i ordretabellen, denne kan senere brukes for å finne ut om det er på tide å "mase" igjen. Da kan du bruke det visning-feltet for å si om en kunde er "låst" av en selger nå. En problemstilling der er vel hva som skjer dersom en selger får en kunde og deretter slår av pc'en. På et eller annet tidspunkt må vel denne låsen låses opp igjen da? Jeg ville nok vurdert å bruke et tidspunkt på denne også.

Lenke til kommentar

Tilfeldig utvalg kan du vel gjøre på dbsiden med Rand() eller på klienten med php. Nå er ikke php det jeg bruker ofte, men array_rand ser ut til å kunne gjøre det du vil. Godt mulig du må inn med flere felt i db ja, men jeg ser ikke åssen du skal kunne si at noe skal låses opp etter en viss tid uten å lagre tiden i db. Det er vel ganske vanlig å lagre salg(ordrer) i egen tabell med en ordrelinjetabell som kobler kunde og ordre sammen. Da er det naturlig å legge tidspunktet for salget i ordretabellen, denne kan senere brukes for å finne ut om det er på tide å "mase" igjen. Da kan du bruke det visning-feltet for å si om en kunde er "låst" av en selger nå. En problemstilling der er vel hva som skjer dersom en selger får en kunde og deretter slår av pc'en. På et eller annet tidspunkt må vel denne låsen låses opp igjen da? Jeg ville nok vurdert å bruke et tidspunkt på denne også.

 

Har tenkt litt på hvordan man kan "låse opp" row'en igjen, og det er å kjøre en spørring hvor verdien settes til verdien for ulåste rader. Eventuelt sette opp en cron job som kjører et skript hver dag på et bestemt tidspunkt for å fjerne "råttne" låsinger.

 

Uansett, tanken var at når selger er ferdig med kunden, skal morgendagens dato settes som neste gang denne kunden kan vises.

 

Det finnes nok også flere måter å fikse dette på, jeg får i hvert fall bare se hva som kommer frem av måter å gjøre det på og deretter bestemme meg for hvordan det blir lettest å gjøre det.

Lenke til kommentar

Det er nettopp det som gjør det gøy og utfordrende, det er mange måter å gjøre tingene på :) bare en siste ting før jeg gir meg. Jeg vet ikke helt hva dette skal brukes til, men det høres ut som en slags callcenterapplikasjon. Isåfall er det er kanskje greit å kunne grave frem historikk på ting som har skjedd i etterkant, hvilken selger gjorde hva og med hvilket resultat. Jeg ville nok muligens hatt en egen tabell for kundehenvendelser med knytning til selger og kunde. Hvis denne inneholder et tidspunkt og en resultatkode er det ganske greit å holde styr på låste kunder. Det er rader uten resultat. Slenger du på et resultattidspunkt kan du måle hvor lang tid ulike selgere bruker på henvendelser.

 

Poenget mitt er ihvertfall at historikk kan være greit og ved å samle mye i en kundetabell hvor ting overskrives mister du denne muligheten. Lykke til :)

Lenke til kommentar

Det er nettopp det som gjør det gøy og utfordrende, det er mange måter å gjøre tingene på :) bare en siste ting før jeg gir meg. Jeg vet ikke helt hva dette skal brukes til, men det høres ut som en slags callcenterapplikasjon. Isåfall er det er kanskje greit å kunne grave frem historikk på ting som har skjedd i etterkant, hvilken selger gjorde hva og med hvilket resultat. Jeg ville nok muligens hatt en egen tabell for kundehenvendelser med knytning til selger og kunde. Hvis denne inneholder et tidspunkt og en resultatkode er det ganske greit å holde styr på låste kunder. Det er rader uten resultat. Slenger du på et resultattidspunkt kan du måle hvor lang tid ulike selgere bruker på henvendelser.

 

Poenget mitt er ihvertfall at historikk kan være greit og ved å samle mye i en kundetabell hvor ting overskrives mister du denne muligheten. Lykke til :)

 

Spot on angående hva det skal brukes til :)

Hovedsaklig kun denne kritiske biten som gjenstår, bortsett fra et mer "pek og klikk" interface for tillegging av nye brukere osv.

Lenke til kommentar

Har ikke lest gjennom alt så unnskyld hvis jeg gjentar noe..

Går uti fra at dette er en nettside hvor brukeren navigerer mellom forskjellige sider.

 

Hva med å gjøre "VISNING" til en int, deretter når en bruker ser på kunden så setter du "VISNING" til den ID'en. Og hver gang brukeren går til en ny side så setter du VISNING til 0.

Problemet her er hvis noen åpner flere faner.

 

En annen løsning kan vel også være WebSockets eller AJAX for å pushe informasjon om en rad er låst eller ikke?

 

Natti natt internett.

Lenke til kommentar

Har ikke lest gjennom alt så unnskyld hvis jeg gjentar noe..

Går uti fra at dette er en nettside hvor brukeren navigerer mellom forskjellige sider.

 

Hva med å gjøre "VISNING" til en int, deretter når en bruker ser på kunden så setter du "VISNING" til den ID'en. Og hver gang brukeren går til en ny side så setter du VISNING til 0.

Problemet her er hvis noen åpner flere faner.

 

En annen løsning kan vel også være WebSockets eller AJAX for å pushe informasjon om en rad er låst eller ikke?

 

Natti natt internett.

 

Løsningen har egentlig ligget i bakhodet hele tiden :)

Siden første post har jeg kommet fram til:

1. Ny kolonne i tabellen som settes til en verdi dersom den recorden vises, og settes til en annen verdi dersom den ikke vises.

2. Randomiseringsfunksjonen til mysql blir brukt når den kjører spørringen hvor 2 variabler må treffe for å produsere et resultat.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...