Autor Zpráva
sloncz
Profil
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
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
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
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
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
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
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
Ještě bych se chtěl zeptat, zda je možnost takto vypisovat více sloupků, než jsou pouze dva??
Alphard
Profil
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
Děkuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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