Avatar billede jalle Nybegynder
13. juli 2001 - 23:09 Der er 25 kommentarer og
2 løsninger

Check om data findes x antal gange.

Nu håber jeg igen at der er nogen der kan hjælpe mig med en lille stump kode, efter at jeg ikke kan hitte ud af den. ;(

Jeg vælger nogle spillere og de er tilknyttet en klub. Der må max være x antal spillere fra hver klub, hvordan kan man gøre det ?

Dataene på klub\'id kan se sådan ud:
55 54 55 50 50 55 54 23 57 24 53 51

og de må kun optræde fx max 2 gange ellers skal den komme ud med fejl.

En lille stump kode, hvor den skal sættes ind.

if ($new_player) {
                        if ($new_player != $last_player) { // checker om den samme spiller optræder flere gange
                            $last_player = $new_player;
                            $row = sql(\"SELECT teamsid FROM players WHERE id = \'$new_player\'\") or die(mysql_error)); // her skal den checke om klubber omtræder mere end x antal gange
}
}
Avatar billede barefoot Nybegynder
13. juli 2001 - 23:25 #1
Skal den kun tjekke om en bestemt klub forekommer flere gange, eller er det alle klubber som skal tjekkes samtidig?
Avatar billede jalle Nybegynder
13. juli 2001 - 23:32 #2
Den skal checke om antallet af en klub er under eller lig med det max antal klubber som der må være.

Fx i ovenstående tal række forekommer klub nr. 55 tre gange, men det må kun forekomme 2 gange.

Klub nr. 50 forekommer 2 gange og det er ok.

Hjalp det på en bedre forståelse ?
Avatar billede barefoot Nybegynder
13. juli 2001 - 23:36 #3
Ikke helt.
Det som jeg vil vide er om koden skal tjekke om alle klubberne forekommer mere end to gange når den bliver eksekveret, eller det kun er en bestemt klub forekommer to gange.
Avatar billede barefoot Nybegynder
13. juli 2001 - 23:37 #4
Det er kun den klub som den henter fra databasen ikke?
Avatar billede jalle Nybegynder
13. juli 2001 - 23:37 #5
Det er forvidt lige meget! Er der en klub er forekommer mere en de 2 gange, så skal den melde fejl.
Avatar billede barefoot Nybegynder
13. juli 2001 - 23:38 #6
<?php
if ($new_player) {
    if ($new_player != $last_player) { // checker om den samme spiller optræder flere gange
        $last_player = $new_player;
        $row = sql(\"SELECT teamsid FROM players WHERE id = \'$new_player\'\") or die(mysql_error));
        if (mysql_num_rows($row)  >2){
            echo \'Klubben forekom mere end to gange.\';
        }
    }
}
?>
Avatar billede jalle Nybegynder
13. juli 2001 - 23:50 #7
Desværre, så virker det ikke. Den kommer ud med 13 et-taller.
Avatar billede barefoot Nybegynder
13. juli 2001 - 23:55 #8
Øh, det er vist en eller flere komunikations brist her!!!
Du giver mig noget kode.
Jeg sætte en ting ind som tælle antallet af udtræk fra din database, og du siger at den skrive 13 et-taller.

Jeg udskriver ikke andet end: echo \'Klubben forekom mere end to gange.\';
Så de 13 et-taller står for din egen regning!
Avatar billede jalle Nybegynder
14. juli 2001 - 00:06 #9
Ja, men det var for at se hvad den skrev, for jeg kunne ikke få den til at virke.

Der bliver valgt 13 forskellige spillere/trænere fra forskellige klubber.

Jeg har fundet ud af at man skal arbejde med arrays, men jeg har ikke kunne løse problemet.
Avatar billede barefoot Nybegynder
14. juli 2001 - 00:17 #10
Du bliver nødt til at fortælle mig hvordan du opbevarer dine oplysninger.

Har du alle klubberne i et array eller en database?
Avatar billede jalle Nybegynder
14. juli 2001 - 00:25 #11
Alle oplysninger bliver hentet fra databasen. Mit problem er at klubberne bliver valgt tilfældigt ud alt efter hvilke spillere spillere der er valgt.

Her er min kode, som skal checke om spillerne og klubberne:

if ($save || $check) {
    if ($UserTeamName) {
        $check_teamsname = mysql_fetch_array(sql(\"SELECT id FROM usersteam WHERE teamsname LIKE \'$UserTeamName\'\"));
        if(!$check_teamsname) {
            if ($save) {
                $res_rounds = mysql_fetch_array(sql(\"SELECT id AS roundsid FROM rounds WHERE leagueid = \'$leagueid\'\"));
                extract($res_rounds);
                $rs_usersteam = sql(\"INSERT INTO usersteam (usersid, sportsid, roundsid, teamsname, payed, accept) VALUES (\'$usersid\',  \'$sportsid\', \'$roundsid\', \'$UserTeamName\', \'NO\', \'NO\')\");
                $rs    = mysql_fetch_array(sql(\"SELECT id AS UserTeamid FROM usersteam WHERE teamsname = \'$UserTeamName\'\"));
                extract($rs);
            }
            // check your teams is valid
            $res = sql(\"SELECT id AS positionsid, uk_position AS positionName, max_players FROM position WHERE sportsid = \'$sportsid\'\");
            for ($s = 1; $rs = mysql_fetch_array($res); $s++) {
                $positionsid    = $rs[\"id\"];
                extract($rs);
                for ($i = 1; $i <= $max_players; $i++) {
                    $new_player = ${$positionName}[$i]; // Spillere som skal checkes
                    if ($new_player) {
                        if ($new_player != $last_player) {
                            $last_player = $new_player;
                            $row2 = mysql_num_rows(sql(\"SELECT teamsid FROM players WHERE id = \'$new_player\'\"));
                            if ($row2 <= 2) {
                                echo \"$row2\"; // checker status på $row2
                                if($save) {
                                    $rs_usersplayers = sql(\"INSERT INTO usersteamsplayers (usersteamsid, positionsid, playersid) VALUES (\'$UserTeamid\', \'$positionsid\', \'$new_player\')\") or die(mysql_error());
                                    $create_teams = ok;
                                    session_register(create_teams);
                                }
                                if ($check) {
                                    if ($lang == dk) $true_messages = \"Dit hold er ok\";
                                    if ($lang == uk) $true_messages = \"Your teams is ok\";
                                }
                            } else {
                                $error_messages= \"Klubben forekom mere end to gange.\";
                            }
                        } else {
                            if ($lang == dk) $error_messages = \"Du har valgt to ens spillere\";
                            if ($lang == uk) $error_messages = \"You have choose two players\";
                        }
                    } else {
                        if ($lang == dk) $error_messages = \"Der mangler at blive valgt en eller flere spillere\";
                        if ($lang == dk) $error_messages = \"Der mangler at blive valgt en eller flere spillere\";
                    }
                }
            }
        } else {
            if ($lang == dk) $error_messages = \"Dit holdnavn findes allerede - find på et nyt\";
            if ($lang == uk) $error_messages = \"Dit holdnavn findes allerede - find på et nyt\";
        }
    } else {
        if ($lang == dk) $error_messages = \"Du har ikke indtastet et gyldigt holdnavn\";
        if ($lang == uk) $error_messages = \"Du har ikke indtastet et gyldigt holdnavn\";
    }
}

Tag dig ikke af mine nederst meddelelser.

Håber at det kan hjælpe dig ;)
Avatar billede barefoot Nybegynder
14. juli 2001 - 00:59 #12
Hvad er det helt præcist som du vil have hjælp til?
At tjekke om klubberne forekommer to gange i databasen, eller om de forekommer to gange i det som bliver hentet ud? Eller er det et helt tredie sted?
Avatar billede jalle Nybegynder
14. juli 2001 - 01:20 #13
At checke hvormange gange klubberne forekommer, når de bliver hentet ud af databasen. Og hvis de forekommer flere gange end 2 så skal den komme med en fejlmeddelse.
Avatar billede barefoot Nybegynder
14. juli 2001 - 01:37 #14
Hvad hedder den kolonne som holdene står i?
Avatar billede jalle Nybegynder
14. juli 2001 - 01:44 #15
teamsid
Avatar billede barefoot Nybegynder
14. juli 2001 - 01:57 #16
Jeg har lidt svært ved at få overblikket til at sætte det ind i din kode.
Men hvis du selv har skrevet alt det som du postede skulle du også gerne være i stand til at implementere løsningen selv. Hvis ikke så få nogle andre til at hjælpe dig.
<?php
$klubber = \'55 54 55 50 50 55 54 23 57 24 53 51\';
$klub_array = explode(\' \', $klubber);
$unik = array_unique($klub_array);
for($i=0; $i<sizeof($unik); $i++){
    unset($rep);
    for($x=0; $x<sizeof($klub_array); $x++){
        if($unik[$i] == $klub_array[$x]){
            $rep++;
        }
        if($rep>2){
            echo $unik[$x].\'Forekom mere end 2 gange<br>\';
        }
    }
}
?>

Jeg har testet det, og som det er nu virker det.
Men du skal have php4.
Avatar billede jalle Nybegynder
14. juli 2001 - 10:58 #17
Nu har jeg prøvet at implementere din løsning i min kode, men når jeg prøver at udskrive $klub_array så står der kun \"array\"

Her er min kode efter implementeringen:

if ($new_player != $last_player) {
    $last_player = $new_player;
    $row2 = mysql_fetch_array(sql(\"SELECT teamsid FROM players WHERE id = \'$new_player\'\"));
    $teams = $row2[teamsid];
    $klub_array = explode(\' \', $teams); // her ligger fejlen
    $unik = array_unique($klub_array);
    for($r=0; $r<sizeof($unik); $r++){
        unset($rep);
        for($x=0; $x<sizeof($klub_array); $x++){
            if($unik[$r] == $klub_array[$x]){
                $rep++;
                $checks == ok;
            }
            if($rep>$max_teams){
                $error_messages = $unik[$x].\'Forekom mere end 2 gange\';
            }
        }
    }
}

Jeg har også prøvet bare at skrive dette \"$unik = array_unique($teams);\" i stedet for, men så kom den ud med fejl.

Vil du hjælpe mig med det sidste ?
Avatar billede morten1968 Nybegynder
14. juli 2001 - 11:33 #18
Jeg synes lige, jeg ville blande mig. Hvis du ændrer dit SQL-statement til

SELECT teamsid
FROM players
WHERE id = \'$new_player\'
GROUP BY teamsid
HAVING COUNT(*) > 2

returneres teamsid på klubber som findes mere end 2 gange.
Avatar billede jalle Nybegynder
14. juli 2001 - 11:46 #19
morten1968 >> Det virker heller ikke ;(
Avatar billede barefoot Nybegynder
14. juli 2001 - 12:12 #20
jalle => heller ikke???
Jeg savner en ordentlig tilbagemelding.
Avatar billede barefoot Nybegynder
14. juli 2001 - 12:16 #21
Jeg smutter nu og kommer først tilbage d. 20...
Så du må klare dig selv for resten.
Avatar billede morten1968 Nybegynder
14. juli 2001 - 12:25 #22
Jeg mener stadig, at (hvis jeg har forstået problemet)

    $CheckTeam = mysql_query(\"SELECT teamsid FROM players WHERE id = \'$new_player\' GROUP BY teamsid HAVING COUNT(*) > 2\");
    if ($row2 = mysql_fetch_array($CheckTeam))
        echo \"$row2[teamsid]\";     

skulle gøre tricket.
Avatar billede jalle Nybegynder
14. juli 2001 - 12:36 #23
Nu har jeg sat den ind sådan her:
for ($i = 1; $i <= $max_players; $i++) {
  $new_player = ${$positionName}[$i]; // Spillere som skal checkes
  $CheckTeam = mysql_query(\"SELECT teamsid FROM players WHERE id = \'$new_player\' GROUP BY teamsid HAVING COUNT(*) > 2\");
  if ($row2 = mysql_fetch_array($CheckTeam))
    echo \"$row2[teamsid]\";
}
Men den kommer ikke frem med de teamsid som forekommer mere end to gange.

I kan prøve at gå ind på: http://test.dreamanagers.dk

Log på med:
brugernavn: test
password: test

Under \"Dine hold\" har man mulighed for at oprette et hold, hvor det kun må være muligt at vælge max to spillere fra hvert hold.

Det giver måske jer en bedre mulighed for at forstår hvad jeg mener.
Avatar billede morten1968 Nybegynder
14. juli 2001 - 12:41 #24
Har du et brugerID i tabellen, er det selvfølgelig det du skal angive i din WHERE-betingelse. Med ovenstående leder du efter antallet af rækker, hvor spiller / klub kombinationen findes mere end 2 gange.
Avatar billede jalle Nybegynder
15. juli 2001 - 00:21 #25
morten1968 >> Jeg har fået din kode til at virke EN gang, men efter at jeg skulle checke den igen, for at se om det nu virkede om det skulle, så kan jeg ikke få den til at virke. Jeg har også ændret lidt i din kode, uden at det skulle have nogen betydning.
Et skærmdump hvor jeg har checket holdene med koden: http://www.jlservice.dk/oversigt6.jpg

Min nye kode:
for ($i = 1; $i <= $max_players; $i++) {
    $new_player = ${$positionName}[$i]; // Spillere som skal checkes
    if ($new_player) {
        $max_teams1 = mysql_fetch_array(sql(\"SELECT max_players FROM leaguedef WHERE sportsid = \'$sportsid\' AND leagueid = \'$leagueid\'\"));
        $max_teams = $max_teams1[max_players]; // $max_teams = 2
        $CheckTeam = mysql_fetch_array(sql(\"SELECT teamsid FROM players WHERE id = \'$new_player\' GROUP BY teamsid HAVING COUNT(*) <= $max_teams\"));
        if ($CheckTeam[teamsid]) {
            if ($new_player != $last_player) {
                $last_player = $new_player;
                $checks = ok;
            } else {
                if ($lang == dk) $error_messages = \"Du har valgt to ens spillere\";
                if ($lang == uk) $error_messages = \"You have choose two players\";
            }
        } elseif (!$CheckTeam[teamsid]) {
            if ($lang == dk) $error_messages = \"Du har valgt flere spillere end det tilladte på $max_teams\";
            if ($lang == uk) $error_messages = \"Something here \";
        }
    }
}

Hvis du siger at det skal virke hvorfor kan jeg så ikke få det til at virke selvom jeg cut & paster din kode over min fil ?
Avatar billede jalle Nybegynder
18. juli 2001 - 09:57 #26
Har selv løst problemet ved at lægge alle dataene i en ny tabel, hvor jeg så kunne sorter dataene.
Avatar billede barefoot Nybegynder
21. juli 2001 - 20:08 #27
Jeg takker for pointsne:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis