Autor Zpráva
B1abla
Profil
Ahoj,
mám údaje ze dvou tabulek "turnaje", "uzivatel" v tabulce "turnaje" mám krom jiného sloupec "id", který má hodnoty 1,2,15,26,27 v tabulce "uzivatel" mám sloupec "akce" s hodnotami 26,27. Potřebuji vymyslet jak porovnat ty to hodnoty a v cyklu vypsat jestli jsou nějaké hodnoty stejné.

Jelikož jsem si myslel, že jednoduchá podmínka vše vyřeší jsem to vyřešil (nefunkčně) takto:

<?php
                        //  udáje s tabulky "turnaje"
                    $dotaz_turnaje = ("SELECT * FROM turnaje");
                    $vysledek_turnaje = mysql_query($dotaz_turnaje, $DBLink);

                        // údaje s tabulky aktuálního uživatele
                    $uzivatel = $_SESSION['nick'];
                    $dotaz_turnaje2 = ("SELECT akce FROM $uzivatel");
                    $vysledek_turnaje2 = mysql_query($dotaz_turnaje2, $DBLink);
                    $vypis2 = mysql_fetch_assoc($vysledek_turnaje2);

                    if(mysql_num_rows($vysledek_turnaje)) {
                        echo "<table class=\"telo_stranky_table\"> 
                                <tr><td>Datum</td><td>Čas</td><td>Pořadatel</td><td></td><td>Účast</td>";
                        while ($vypis = mysql_fetch_assoc($vysledek_turnaje)) {
                            echo "<tr><td>".strftime("%d.%m.%Y",strtotime($vypis['datum']))."</td>";
                            echo "<td>".strftime("%H:%M", strtotime($vypis['cas']))."</td>";
                            echo "<td>".$vypis['vytvoril']."</td>";
                            if((date("Y-m-d")) > ($vypis['datum'])) {
                                echo "<td>".$vypis['odehrano']."</td>";
                            }
                            elseif (($vypis['id']) == ($vypis2['akce'])) {   // tato podmínka samozřejmě nefunguje
                                echo "<td><a href = \"unlog_turnaje.php?id=" . $vypis['id'] . "\">Odhlásit</a></td>";
                            }
                            else {
                                echo "<td><a href = \"log_turnaje.php?id=" . $vypis['id'] . "\">Přihlásit</a></td>";
                                }
                            echo "<td>".$vypis['ucast']."</td></tr>";
                            }                            
                        echo "</table>";
                    }
                    else echo "Žádný turnaj není zadán";

                mysql_free_result($vysledek_turnaje);    
                ?>

budu rád za každou radu
mimochodec
Profil
Máš jeden while, takže procházíš jednu sadu vrácených záznamů. Jestli chceš procházet dvě sady, musíš je vnořit do sebe, tzn. jeden dotaz do databáze, jeden while a v něm druhý dotaz a druhý while.

Druhá věc je, že toto je špatné řešení (byť funkční). Správné řešení spočívá v tom, že máš jednu tabulku turnajů, druhou tabulku hráčů a třetí tabulku akcí, mj. se sloupcem IDhrace. Nebo možná i nějakou vazební tabulku pro uložení kombinace turnaj-hráč, to teď nedokážu posoudit. Tvoje současné řešení - co hráč to tabulka - je zásadně špatně a bude ti dělat jenom problémy.
B1abla
Profil
mimochodec:
děkuji za odpověd, předělám to, něco takového jsem potřeboval slyšet
peta
Profil
A nemuzes to resit jednim sql dotazem?

$vypis2 = mysql_fetch_assoc($vysledek_turnaje2);
// vyber prvni radek z vysledku2, vic jich nevybiras!
...
 while ($vypis = mysql_fetch_assoc($vysledek_turnaje)) {
// vyber kazdy radek z vysledku1
...
elseif (($vypis['id']) == ($vypis2['akce'])
// porovnej kazdou hodnotu z vysledku 1 s prvni hodnotou z vysledku 2
// jenze ty potrebujes porovnat vsechny hodnoty vysledku 1 se vsemi hodnotami vysledku 2
Takze bys musel uz pod ten prvni radek pridat while a vytahnout si z vysledku 2 vsechny hodnoty do nejakeho pole a pak mit cyklus v cyklu nebo pouzit in_array. A to by myslim rychleji zvladlo sql.

Jo, souhlas s mimochodec. Proc to nemas jako 3 tabulky?
--- hraci ---
idhrac, jmeno
--- akce ---
idakce, nazev
--- propojeni ---
idpropojeni, idakce, idhrac
SELECT b.jmeno, c.nazev FROM propojeni a 
  LEFT JOIN hraci b ON b.idhrac = a.idhrac
  LEFT JOIN hraci c ON c.idakce = a.idakce
WHERE a.idhrac = 1234 OR b.jmeno='B1abla'

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0