Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Automatycznie tworzenie spotkan, Kombinacje bez powtórzen
siatkarzyna
post 10.09.2008, 19:38:23
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


Witam w ramach ćwiczeń pisze taki "cms" do prowadzenia np amatorskiej ligi. Problem mam taki dodaje drużyny do tabeli TEAM w tabeli mam kolumny id, nazwa i teraz chciał bym napisać funkcje która by automatycznie tworzyła spotkania każdy z każdym i zapisywała je do tabeli SPOTKANIA id_team1, id_team2. Proszę o jakąś podpowiedź co_jest.gif

Ten post edytował siatkarzyna 13.09.2008, 18:52:48
Powód edycji: Poprawiłem literówke w temacie. /webdice


--------------------
Space Studio
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
BibDeep
post 10.09.2008, 20:55:49
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 2
Dołączył: 4.01.2007
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $polacz = mysql_connect('adres_serwera', 'uzytkownik', 'haslo') OR DIE("Nie polaczono z serwerem mysql");
  3. mysql_select_db('baza_danych') OR DIE("Nie polaczono z baza danych");
  4.  
  5. $query = "SELECT * FROM team";
  6. $result = mysql_query($query);
  7.  
  8. while($row = mysql_fetch_array($result))
  9. {
  10.    while($row2 = mysql_fetch_array($result))
  11.    {
  12.        $query = "INSERT INTO spotkania (`id`, `id_team1`, `id_team2`) VALUES ( '', '".$row."', '".$row2."')";
  13.    }
  14. }
  15. ?>


Piszę z głowy, ale chyba powinno być dobrze winksmiley.jpg

Pozdrawiam.

Ten post edytował BibDeep 10.09.2008, 20:56:24


--------------------
Personal Portfolio: http://www.klodzinski.pl/
Go to the top of the page
+Quote Post
siatkarzyna
post 10.09.2008, 22:57:06
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


Twój kod nie wysyłał w pętli zapytania poprawiłem go
  1. <?php
  2. $query = "SELECT * FROM team";
  3. $result = mysql_query($query);
  4.  
  5. while($row = mysql_fetch_array($result))
  6. {
  7.   while($row2 = mysql_fetch_array($result))
  8.   {
  9.       $query = "INSERT INTO spotkania (`id`, `id_team1`, `id_team2`) VALUES ( '', '".$row."', '".$row2."')";
  10.             $result = mysql_query($query) or die (mysql_error());
  11.   }
  12. }
  13. ?>

i wyskoczyly bledy

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\liga\index2.php on line 11

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\liga\index2.php on line 9

Napisalem kod tak dla sprawdzenia ktory pobiera rekordy z tabeli TEAM i zapisuje ich id do innej tabeli SPOTKANIA id_team1
  1. <?php
  2. $zapytanie = 'SELECT * FROM team ';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4.  
  5. while ($rekord = mysql_fetch_assoc($wynik)) {
  6.  
  7. $numer = $rekord[id];
  8.  
  9. $query = "INSERT INTO spotkania ('id_team1') VALUES ('$numer')";
  10.             $result = mysql_query($query) or die (mysql_error());
  11.  
  12. }
  13. ?>

i tez wyskakuje blad

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''id_team1') VALUES ('1')' at line 1


--------------------
Space Studio
Go to the top of the page
+Quote Post
-MietekJurek-
post 11.09.2008, 06:43:03
Post #4





Goście







  1. <?php
  2. 'id_team1'
  3. ?>
zmień na `id_team1` :)powinno śmignąć
Go to the top of the page
+Quote Post
kazag
post 11.09.2008, 08:06:52
Post #5





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

Ostrzeżenie: (0%)
-----


Chodziło pewnie o to, żeby skrypt tworzył kalendarz spotkań, tzn wybierał druzynę , dobierał drugą, sprawdzał, czy taki mecz już istnieje i jeśli nie, to go dodawał? (i dzielił na kolejki?)


--------------------
Okoczia - jedyne w Polsce wirtualne państwo indiańskie.
kazag.net - i coś o mnie.
Go to the top of the page
+Quote Post
siatkarzyna
post 11.09.2008, 10:50:29
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


kazag pomoglo dodaje z tym ze jest tak (Zakładając ze jest 12 druzyn)
team1_id team2_id
1 ------------------2
1-------------------3
1-------------------4
1-------------------5
1-------------------6
1-------------------7
1-------------------8
1-------------------9
1------------------10
1------------------11
1------------------12

  1. <?php
  2. $zapytanie = 'SELECT * FROM team ';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4.  
  5. while ($rekord = mysql_fetch_assoc($wynik)) {
  6.  
  7.  while($rekord2 = mysql_fetch_array($wynik))
  8.   {
  9.  
  10. $numer = $rekord[id];
  11. $numer2 = $rekord2[id];
  12.  
  13. $query = "INSERT INTO spotkania (`id_team1`, `id_team2`) VALUES ('$numer', '$numer2')";
  14.             $result = mysql_query($query) or die (mysql_error());
  15.  
  16. }}
  17. ?>


No i na tym sie konczy pewnie dla tego ze druga pentla rekord2 sie zakonczyla wczoraj probowalem zastosowac inne pentle np for ale nie wychodzilo jeszcze jestem przeczkolakiem wstydnis.gif
Cytat
Chodziło pewnie o to, żeby skrypt tworzył kalendarz spotkań, tzn wybierał druzynę , dobierał drugą, sprawdzał, czy taki mecz już istnieje i jeśli nie, to go dodawał? (i dzielił na kolejki?)

Dokladnie ma tak to wygladac tylkop na poczatku chicalem zrobic zeby dodawalo samo spotaknia potem chcialem pomyslec nad dzielenie na kolejki wzgledem dat itp.


--------------------
Space Studio
Go to the top of the page
+Quote Post
BibDeep
post 12.09.2008, 22:10:50
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 2
Dołączył: 4.01.2007
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat
Dokladnie ma tak to wygladac tylkop na poczatku chicalem zrobic zeby dodawalo samo spotaknia potem chcialem pomyslec nad dzielenie na kolejki wzgledem dat itp.


Hm... to moze sproboj tak?

  1. <?php
  2. $zapytanie = 'SELECT * FROM team ';
  3. $wynik = mysql_query($zapytanie) or die (mysql_error());
  4. $wynik2 = mysql_query($zapytanie) or die(mysql_error());
  5.  
  6. while ($rekord = mysql_fetch_assoc($wynik)) {
  7.  
  8. $numer = $rekord[id];
  9.  
  10.  while($rekord2 = mysql_fetch_array($wynik2))
  11.   {
  12.  
  13.  
  14.        $numer2 = $rekord2[id];
  15.        if($numer != $numer2){
  16.            $query = "INSERT INTO spotkania (`id_team1`, `id_team2`) VALUES ('$numer', '$numer2')";
  17.            $result = mysql_query($query) or die (mysql_error());
  18.        }
  19. }}
  20. ?>


Znów z głowy, ale niestety nie mam w domu jak sprawdzić poprawności działania, ale może chociaż Cię to naprowadzi winksmiley.jpg


--------------------
Personal Portfolio: http://www.klodzinski.pl/
Go to the top of the page
+Quote Post
siatkarzyna
post 13.09.2008, 19:07:15
Post #8





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


No niestety dalej jest to samo 1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 1 9, 1 11, 1 12, i koniec. Szukam caly czas z tym ze teraz szukam jak wyswietlic wszytki kombinacje bez powtorzen z tablicy znalazlem jeden kod ktory prawie jest dobro prawie robi wielka roznice

  1. <?php
  2. $pary[] = 1;
  3. $pary[] = 2;
  4. $pary[] = 3;
  5. $pary[] = 4;
  6. $pary[] = 5;
  7. $pary[] = 6;
  8. $pary[] = 7;
  9. $pary[] = 8;
  10. $pary[] = 9;
  11. $pary[] = 10;
  12. $pary[] = 11;
  13. $pary[] = 12;
  14.  
  15. $k = 1;
  16.  
  17. for ($i = 1; $i < count($pary); $i++) {
  18. for ($j = $k; $j < count($pary); $j++) {
  19. if ($pary[$i] <> $pary[$j]) {
  20. echo $i."&nbsp: ".$j." OR ".$j."&nbsp: ".$i.'<br />';
  21. }
  22. }
  23. $k++;
  24. }
  25. ?>


Z mysla o meczach kod jest dobry bo mozna powiedziec ze generuje tez rewanże tylko w przykladowym kodzie w tablicy jest 12 wartosci a kod nie podaje ostatniego spotkania czyli 11 - 12 or 12 - 11 i jeszcze jest problem jak chce pobrac wartosci z bazy danych i przypisac zmienej $pary tablice otrzymana z zapytania do bazy danych wtedy to wcale nie che dzialac


--------------------
Space Studio
Go to the top of the page
+Quote Post
dr_bonzo
post 13.09.2008, 20:43:26
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ludzie, ehhh, podstawy matematyki i algorytmow

  1. <pre><?php
  2.  
  3. $druzyny = range( 1, 12 );
  4. print_r( $druzyny );
  5.  
  6. $count = count( $druzyny );
  7. $mecze = array( 0 => array(), 1 => array() ); // mecze i rewanze osobno
  8. for ( $i = 0; $i < $count - 1; $i++ ) // -1 zeby ostatnia para bylo [przedostatni, ostatni]
  9. {
  10.    for ( $j = $i+1; $j < $count; $j++ ) // $j = $i +1 - czyli zaczynamy od nastepnej druzynie po $i
  11.    {
  12.        $druzyna_1 = $druzyny[$i];
  13.        $druzyna_2 = $druzyny[$j];
  14.        
  15.        $mecze[0][] = array( $druzyna_1, $druzyna_2 );
  16.        $mecze[1][] = array( $druzyna_2, $druzyna_1 );
  17.    }
  18. }
  19. printf( "Meczy w rundz: %d\n", count( $mecze[0] ) );// powinno byc ( $count - 1 ) * $count / 2 = 11 * 6 = 66
  20. print_r( $mecze );
  21. ?>

Aaa, i najpierw RAZ pobierasz z bazy IDki druzyn a potem to odpalasz.

Ten post edytował dr_bonzo 13.09.2008, 20:43:58


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
siatkarzyna
post 14.09.2008, 16:05:35
Post #10





Grupa: Zarejestrowani
Postów: 85
Pomógł: 4
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


No i w końcu się udało wielkie dzieki dla dr_bonzo a tu cały kod kotry pobiera id druzyn z bazy danych a potem tworzy spotkania i dodaje do bazy danych (w tym kodzie tylko pierwsza runde)

  1. <?php
  2. include ('connect.php');
  3.  
  4.  
  5. $zapytanie = 'SELECT id FROM team ';
  6. $wynik = mysql_query($zapytanie) or die (mysql_error());
  7.  
  8. for ($i = 0; $i < $rekord = mysql_fetch_array($wynik); $i++) {
  9.  
  10.  
  11. $mecze[] = $rekord[id];
  12.  
  13. }
  14.  
  15. $druzyny = $mecze;
  16.  
  17. /* echo "<pre>";
  18. print_r( $druzyny );
  19. echo "</pre>";
  20. */
  21. $count = count( $druzyny );
  22. $mecze = array( 0 => array(), 1 => array() ); // mecze i rewanze osobno
  23. for ( $i = 0; $i < $count - 1; $i++ ) // -1 zeby ostatnia para bylo [przedostatni, ostatni]
  24. {
  25.   for ( $j = $i+1; $j < $count; $j++ ) // $j = $i +1 - czyli zaczynamy od nastepnej druzynie po $i
  26.   {
  27.       $druzyna_1 = $druzyny[$i];
  28.       $druzyna_2 = $druzyny[$j];
  29.      
  30.       $mecze[0][] = array( $druzyna_1, $druzyna_2 );
  31.       $mecze[1][] = array( $druzyna_2, $druzyna_1 );
  32.   }
  33. }
  34. printf( "Meczy w rund: %d\n", count( $mecze[0] ) );// powinno byc ( $count - 1 ) * $count / 2 = 11 * 6 = 66
  35.  
  36.  
  37. $ilosc = count( $mecze[0] );
  38.  
  39.  
  40. echo "<br>";
  41. echo "<hr>";
  42.  
  43. for ( $i=0; $i<$ilosc; $i++) {
  44.  
  45. $team1 = $mecze[0][$i][0];
  46. $team2 = $mecze[0][$i][1];
  47.  
  48. echo $team1." -- ".$team2."<BR>";
  49.  
  50. $query = "INSERT INTO spotkania (`id_team1`, `id_team2`) VALUES ('$team1', '$team2')";
  51.            $result = mysql_query($query) or die (mysql_error());
  52. }
  53. ?>


--------------------
Space Studio
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:53