Autor | Zpráva | ||
---|---|---|---|
B1abla Profil |
#1 · Zasláno: 4. 11. 2012, 18:09:09
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 |
#2 · Zasláno: 4. 11. 2012, 18:41:54
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 |
#3 · Zasláno: 4. 11. 2012, 19:19:47
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 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' |
||
Časová prodleva: 11 let
|
0