Autor | Zpráva | ||
---|---|---|---|
sloncz Profil |
#1 · Zasláno: 15. 1. 2015, 19:21:06
Zdravím, lámu si nad tímto problémem hlavu už dost dlouho a nenapadá mě žádné řešení.
Mám v databázi tabulku sloupek1 | sloupek2 | -------------------------- slovo1 | slovo2 | -------------------------- slovo3 | slovo4 | -------------------------- ... a moje otázka z ní, zda prosím někdo z Vás nezná způsob, jak si nechat vypsat všechny možné kombinace těchto slov, ale pouze jen mezi těmi dvěma sloupky, ne vypisovat dvojice slov ze stejného sloupku? Mohlo by to tedy vypadat nějak takto slovo1 - slovo2 slovo1 - slovo4 slovo2 - slovo2 slovo2 - slovo4 |
||
Kcko Profil |
#2 · Zasláno: 15. 1. 2015, 19:28:51
Kombinace sloupků půjde přes
CROSS JOIN
Nějak takto SELECT t1.sloupek1, t2.sloupek2 FROM slova t1 CROSS JOIN slova t2 ORDER BY t1.sloupek1, t2.sloupek2 To co jste napsal níže není žádná taková kombinace. |
||
sloncz Profil |
#3 · Zasláno: 15. 1. 2015, 21:09:21
To mi ale vypíše pouze jednu náhodnou dvojici slov ne?
Já bych potřeboval vypsat všechny možné dvojici, co z toho půjdou. |
||
lionel messi Profil |
#4 · Zasláno: 15. 1. 2015, 21:27:42
sloncz:
„To mi ale vypíše pouze jednu náhodnou dvojici slov ne?“ Nie, už len preto, že v dotaze chýba klauzula LIMIT. Mne Kckov príklad vráti: slovo1 - slovo2 slovo1 - slovo4 slovo3 - slovo2 slovo3 - slovo4 CROSS JOIN pracuje tak, že každý riadok z tabuľky uvedenej vo FROM spojí s každým riadkom z tabuľky uvedenej na pravej strane za CROSS JOIN. |
||
sloncz Profil |
Ano, takto kdyby to fungovalo by bylo super, problém ale je v tom, že v echu mi to hodí pouze první výsledek
$vypis = mysqli_result(mysqli_query("SELECT t2.sloupek1, t2.sloupek2 FROM slova t1 CROSS JOIN slova t2 ORDER BY t1.sloupek1, t2.sloupek2"), 0); Omlouvám se, ale opravdu jsem ztracen, takže je možné, že jsem sql dotaz zapsal špatně. |
||
Kcko Profil |
sloncz:
a cyklus while znáš? To co si napsal Ti vždy vrátí pouze 1 výsledek z dotazu... kluku, přes základy jsi se dostal? $query = mysql_query(...); while ($row = mysql_fetch_array($query)) { print_r($row); } |
||
sloncz Profil |
Ano, přes while jsem to měl, jen mi to stále házelo chybu s mysql_fetch_array
Nyní když se mi díky Vám povedlo to dát dohromady, tak mi to vypíše výsledek test1 test2 test1 test4 test3 test2 test3 test4 ale to není výsledek, který potřebuju a který jsem psal v příspěvku výše. $query = mysql_query("SELECT t1.sloupek1, t2.sloupek2 FROM slova t1 CROSS JOIN slova t2 ORDER BY t1.sloupek1, t2.sloupek2"); $x = 1; while ($row = mysql_fetch_array($query)) { echo $row[$x]."<br />"; } |
||
lionel messi Profil |
sloncz:
Stačí: while ($row = mysql_fetch_array($query)) { echo $row['sloupek1']. $row['sloupek2']; } |
||
sloncz Profil |
#9 · Zasláno: 15. 1. 2015, 21:56:08 · Upravil/a: sloncz
Teď nevím jak to myslíte. "t1" tam zapsáno mám, takže tam má místo toho být t2? Pokud ano, tak i když to tam zapíšu, nadále se vypisuje pouze výpis těch, co jsem napsal výše
lionel messi: w while ($row = mysql_fetch_array($query)) { echo $row['sloupek1']. $row['sloupek2']; To mi stále vypisuje jen test1test2 test3test4 test1test2 test3test4 |
||
lionel messi Profil |
#10 · Zasláno: 15. 1. 2015, 21:58:13
sloncz:
„Teď nevím jak to myslíte. "t1" tam zapsáno mám, takže tam má místo toho být t2?“ Ospravedlňujem sa, pôvodne som reagoval na pôvodný príspevok, po jeho úprave som svoj post revidoval, pozrite sa teraz vyššie. |
||
sloncz Profil |
#11 · Zasláno: 15. 1. 2015, 22:00:54 · Upravil/a: sloncz
Já se omlouvám, funguje to správně, moc jsem se do toho zamotal.
Děkuji moc za rady, moc jste mi pomohl. Ještě bych se chtěl zeptat, zda je možnost takto vypisovat více sloupků, než jsou pouze dva? |
||
sloncz Profil |
#12 · Zasláno: 16. 1. 2015, 15:39:48
Ještě bych se chtěl zeptat, zda je možnost takto vypisovat více sloupků, než jsou pouze dva??
|
||
Alphard Profil |
#13 · Zasláno: 16. 1. 2015, 15:45:22
Výše naznačeným způsobem lze opět připojit tutéž tabulku pod jiným aliasem. Je to jen kartézský součin (což přes dělá join bez omezujících podmínek).
|
||
sloncz Profil |
#14 · Zasláno: 17. 1. 2015, 19:38:07
Děkuji
|
||
Časová prodleva: 9 let
|
0