Avatar billede warberg Juniormester
25. november 2008 - 09:52 Der er 26 kommentarer og
1 løsning

"I træk"

Spørgsmål flyttet fra http://www.eksperten.dk/spm/853977

Jeg skal have fat i "vundne kampe i træk"

id 35 vundet
id 47 vundet
id 66 vundet
id 78 tabt
id 83 vundet
id 88 vundet

Jeg trækker frem at 5 kampe er vundet. Men jeg skal have fat i at 3 er vundet i træk.

Id er ikke fortløbende.
Avatar billede w13 Novice
25. november 2008 - 09:56 #1
Så må der vel være et datofelt eller noget også? Vis lige tabel-strukturen, som den ser ud.
Avatar billede warberg Juniormester
25. november 2008 - 10:03 #2
To tabeller

CREATE TABLE `pgram` (
  `kampid` int(10) NOT NULL auto_increment,
  `runde` int(3) NOT NULL default '0',
  `aar` varchar(10) NOT NULL default '2008/2009',
  `dato` datetime NOT NULL default '0000-00-00 00:00:00',
  `hjemme` varchar(50) NOT NULL default '',
  `ude` varchar(50) NOT NULL default '',
  `dommer` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`kampid`)
)


CREATE TABLE `res` (
  `kampid` int(6) NOT NULL auto_increment,
  `tilskuere` int(10) NOT NULL default '0',
  `hjemmemaal` int(2) NOT NULL default '0',
  `udemaal` int(2) NOT NULL default '0',
  PRIMARY KEY  (`kampid`)
)
Avatar billede w13 Novice
25. november 2008 - 10:19 #3
Men handler det ikke bare om, at sortere efter dato? Er det ikke det, du mangler?
Avatar billede warberg Juniormester
25. november 2008 - 10:34 #4
Måske du har ret, det er nok dato jeg skal have fat i.
I ovenstående eks. skal jeg have den til at breake ved id = 78

SUM(IF(res.hjemmemaal > res.udemaal, 1, 0)) AS won

FROM pgram AS p
    INNER JOIN res AS res
    ON p.kampid = res.kampid

WHERE p.hjemme = '$id'

GROUP BY p.hjemme
Avatar billede warberg Juniormester
25. november 2008 - 12:11 #5
id 35 vundet  18/02 2008
id 47 vundet  25/02 2008
id 66 vundet  28/02 2008
id 78 tabt    02/03 2008
id 83 vundet  12/03 2008
id 88 vundet  17/03 2008

Mit problem er at skulle sortere på "tilfældige" værdier.
Kan man give udtrækket midlertidige værdier:

id 35 vundet  18/02 2008  midlertidig: 1
id 47 vundet  25/02 2008  midlertidig: 2
id 66 vundet  28/02 2008  midlertidig: 3
id 78 tabt    02/03 2008  midlertidig: 4
id 83 vundet  12/03 2008  midlertidig: 5
id 88 vundet  17/03 2008  midlertidig: 6

Så ville der være noget at sortere på?
Avatar billede w13 Novice
25. november 2008 - 12:12 #6
Jamen er det ikke datoen, der skal afgøre rækkefølgen? Ellers skal du bare lade være med at sortere, så bliver de hentet i den rækkefølge de ligger - dvs. som du viser med midlertidig: 1, 2, 3, 4, 5 og 6.
Avatar billede warberg Juniormester
25. november 2008 - 12:26 #7
Jo du har ret, men mit udtræk: "Vis vundne" giver alle 5 poster. Jeg skal have det reduceret til "Vis vundne i træk" som skal ned på de 3
Avatar billede w13 Novice
25. november 2008 - 13:41 #8
Så skal du vel bare tilføje:
LIMIT 0,3
sidst i din SQL-sætning.
Avatar billede warberg Juniormester
25. november 2008 - 16:31 #9
Jeg tror vi snakker lidt forbi hinanden. Ovenstående er blot et tænkt udtræk hvor det tilfældigvis er 3 i træk. Det kunne lige så godt være 12 eller 18. Jeg søger en metode at regne stimen ud.
Avatar billede warberg Juniormester
25. november 2008 - 17:31 #10
http://discussions.apple.com/thread.jspa?threadID=1238528&tstart=6810

Det er faktisk noget i stil med dette her jeg søger. Kan det "oversættes" til en php/mysql-løsning?
Avatar billede w13 Novice
20. august 2009 - 12:35 #11
Fået løst problemet endnu?
Avatar billede warberg Juniormester
20. august 2009 - 12:45 #12
Nej, faktisk ikke...
Avatar billede w13 Novice
20. august 2009 - 12:56 #13
Jeg kan ikke løse det i ren SQL, men ville det være i orden med en PHP-løsning på nogle linjer?
Avatar billede warberg Juniormester
20. august 2009 - 13:07 #14
Jeg er på  :-)
Avatar billede w13 Novice
20. august 2009 - 13:38 #15
Måske noget i stil med:

$sql = mysql_query( 'SELECT id, SUM(IF(res.hjemmemaal > res.udemaal, 1, 0)) AS won FROM pgram AS p INNER JOIN res AS res ON p.kampid = res.kampid WHERE p.hjemme = '$id' GROUP BY p.hjemme' ) or die(mysql_error());

$prevPost = false;
while( $result = mysql_fetch_array($sql) ) {
   
    if ( $result['won'] && !$prevPost ) {
        echo '<h3>Her starter en ny række vundne kampe!</h3>';
    }
   
    if ( $result['won'] ) {
        echo '<p>Udskriv posten her: ' . $result['id'] . '</p>';
    }
   
    $prevPost = $result['won'];
   
}
Avatar billede warberg Juniormester
20. august 2009 - 14:12 #16
Jeg har følgende:

$sql = mysql_query("SELECT p.kampid AS id, SUM(IF(res.hjemmemaal > res.udemaal, 1, 0)) AS won FROM pgram AS p INNER JOIN res AS res ON p.kampid = res.kampid WHERE p.hjemme = '$id' GROUP BY p.hjemme") or die(mysql_error());

$prevPost = false;
while( $result = mysql_fetch_array($sql) ) {
   
    if ( $result['won'] && !$prevPost ) {
        echo '<h3>Her starter en ny række vundne kampe!</h3>';
    }
   
    if ( $result['won'] ) {
        echo '<p>Udskriv posten her: ' . $result['id'] . '</p>';
    }
   
    $prevPost = $result['won'];
   
}

Giver mig:

$result['id'] = 3 som er første kampid hvor $id optræder
$result['won'] = 153 som er det samlede antal vundne kampe for $id
Avatar billede w13 Novice
20. august 2009 - 14:21 #17
Jeg forstår det ikke helt. Hvad er dit præcise output?
Avatar billede warberg Juniormester
20. august 2009 - 14:50 #18
Avatar billede w13 Novice
21. august 2009 - 14:50 #19
Men på din liste:

"id 35 vundet
id 47 vundet
id 66 vundet
id 78 tabt
id 83 vundet
id 88 vundet"

var der da ikke noget id 3?
Avatar billede warberg Juniormester
21. august 2009 - 15:46 #20
Ja ok, kan godt forstå du undrer dig, ovenstående er blot et tænkt eks.
Avatar billede w13 Novice
21. august 2009 - 15:54 #21
Ja ok. Men så kan jeg jo ikke se, om:

"Her starter en ny række vundne kampe!

Udskriv posten her: 3"

skulle være forkert eller hvad der skulle være galt. =)

For mig at se kunne det lige så godt være, at "3" var den eneste post i databasen.
Avatar billede warberg Juniormester
21. august 2009 - 16:12 #22
Hvis vi tager et andet hold:
http://www.hvemvandt.dk/test.php?id=26

$result['id'] = 1737 svarer til første hjemmekamp
(kan fiskes her http://www.hvemvandt.dk/vishold.php?id=26&vis=program&aar=2000%2F2001)


$result['won'] = 7 svarer til antal vundne hjemmekampe ialt
(kan ses her http://www.hvemvandt.dk/vishold_alltime.php?id=26)

Jeg fatter minus :-)
Avatar billede w13 Novice
21. august 2009 - 16:28 #23
Jeg kender ikke din kode godt nok til at kunne se, hvad der ikke virker, tror jeg.

Og i min kode blev der vist ikke udskrevet $result['won'] så et eller andet må være lavet om.

Er 1737 og 7 ikke korrekte tal?
Avatar billede warberg Juniormester
21. august 2009 - 16:38 #24
Her er koden

$sql = mysql_query("SELECT p.kampid AS id, SUM(IF(res.hjemmemaal > res.udemaal, 1, 0)) AS won FROM pgram AS p INNER JOIN res AS res ON p.kampid = res.kampid WHERE p.hjemme = '$id' GROUP BY p.hjemme") or die(mysql_error());

$prevPost = false;
while( $result = mysql_fetch_array($sql) ) {
   
    if ( $result['won'] && !$prevPost ) {
        echo '<h3>Her starter en ny række vundne kampe!</h3>';
    }
   
    if ( $result['won'] ) {
        echo '<p>Udskriv result[id]: ' . $result['id'] . '</p>';

        echo '<p>Udskriv result[won]: ' . $result['won'] . '</p>';
    }
   
    $prevPost = $result['won'];
   
}


Jeg udskriver $result['won'] for at se hvad det er.
Nej, det er ikke korrekte tal.
Avatar billede w13 Novice
21. august 2009 - 17:25 #25
Ok. Så er SQL'en "i stykker", men jeg ved ikke nok om dine data til at kunne sige hvor.
Avatar billede warberg Juniormester
21. august 2009 - 18:08 #26
ok, men du har bragt mig lidt videre... tak for forsøget, smid et svar for point.
Avatar billede w13 Novice
21. august 2009 - 18:11 #27
Ok, vi kan vel dele. =)
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