Autor Zpráva
Grs
Profil *
Dobrý den,

předem bych rád zmínil, že mi Google nepomohl a tak si nejsem jist, zda-li je můj problém vůbec řešitelný.

Mám jednu tabulku a v té sloupce. Jedná se o phpBB a o to, že každý má na svůj profil možnost vložit dvě YT videa.

Takže tabulka phpbb_users a sloupce youtube_1 a youtube_2

Ta YT videa potřebuji vytáhnou, což mám, ale jako dva výpisy. Potřeboval bych to jako jeden výpis. Tedy nějak sloučit.

Poradil by mi někdo, prosím?
juriad
Profil
Ukaž nám svůj (relevantní) kód, může to být opravdu jen prkotina.
Grs
Profil *
Mám to takto rozdělené:

$last_tube = '';
$sql = "SELECT youtube_1
  FROM " . USERS_TABLE . "
  WHERE p_youtube_vid_1 NOT LIKE ''
  ORDER BY RAND()";
$result = $db->sql_query_limit($sql, 2);

while ($row = $db->sql_fetchrow($result))
{
    $last_tube .= '<a href="http://www.youtube.com/watch?v=' . $row['youtube_1'] . '" onclick="window.open(this.href); return false;"><img src="http://i4.ytimg.com/vi/' . $row['youtube_1'] . '/0.jpg" alt="" /></a>';
}
$db->sql_freeresult($result);

/**************/

$last_tube2 = '';
$sql = "SELECT youtube_2
  FROM " . USERS_TABLE . "
  WHERE p_youtube_vid_2 NOT LIKE ''
  ORDER BY RAND()";
$result = $db->sql_query_limit($sql, 2);

while ($row = $db->sql_fetchrow($result))
{
    $last_tube2 .= '<a href="http://www.youtube.com/watch?v=' . $row['youtube_2'] . '" onclick="window.open(this.href); return false;"><img src="http://i4.ytimg.com/vi/' . $row['youtube_2'] . '/0.jpg" alt="" /></a>';
}
$db->sql_freeresult($result);

$template->assign_vars(array(
  'LAST_TUBE' => $last_tube,
  'LAST_TUBE_TWO' => $last_tube2,
));
Monkeys
Profil *
2 tabulky mozes pojit napr. takto:

SELECT tableA.*, tableB.* FROM tableA LEFT JOIN tableB ON tableA.ID=tableB.ID WHERE /neaka podmienka/

M:
juriad
Profil
Rozmysli si, zda vždy (až do konce světa) bude mít uživatel možnost jen dvou videí. Přidat později další sloupec nebude správné řešení.
Ale pokud VŽDY budou maximálně dvě, šlo použít SELECT:
(SELECT youtube_1
  FROM " . USERS_TABLE . "
  WHERE p_youtube_vid_1 <> ''
  ORDER BY RAND()
  LIMIT 1)
UNION
(SELECT youtube_2
  FROM " . USERS_TABLE . "
  WHERE p_youtube_vid_2 <> ''
  ORDER BY RAND()
  LIMIT 1)
Tento jeden select vrátí maximálně dva řádky (méně jen v případě, že nikdo nevyplnil první nebo druhé), ty snadno projdeš a vypíšeš.
Grs
Profil *
Teď si nejsem jistý, zda-li to řeší můj problém. Nejsem v tom přeborník, tak mne když tak omluvte. Zkusím svůj problém ještě přiblížit.

Momentálně to mám takto (jako příklady jména):

Výpis youtube_1: jarda, vojtěch
Výpis youtube_2: kateřina, lenka

Mám to dané za sebou, takže to vypadá takto: jarda, vojtěch, kateřina, lenka
Protože je to náhodně, tak při F5 tak třeba zase: vojtěch, jarda, lenka, kateřina

A potřebuji například to takto: jarda, kateřina, lenka, vojtěch
Při F5 zase pro příklad: kateřina, vojtěch, lenka, jarda

Takže bych potřeboval nejspíš nějak youtube_1 a youtube_2 sloučit třeba do $youtube_1_2, abych to mohl použít pro výpis:

$last_tube1_2 .= '<a href="http://www.youtube.com/watch?v=' . $youtube_1_2 . '" onclick="window.open(this.href); return false;"><img src="http://i4.ytimg.com/vi/' . $youtube_1_2 . '/0.jpg" alt="" /></a>';

Já a vysvětlování, snad to pochopíte. :)


Aby se tam náhodně generovalo ID YouTube videa z obou sloupců.
juriad
Profil
Aha, zruš sloupce p_youtube_vid_[12], vytvoř další tabulku youtube_vids se schématem:
id - id videa - AUTOINCREMENT
video - bude obsahovat to, co je teď v p_youtube_vid_[12]
uzivatel - id uživatele z tabulky USERS_TABLE
pridano - datum přidání

přidání videa (pro uživatele) bude provedeno:
INSERT INTO youtube_vids (video, uzivatel) VALUES ("video_uzivatele_3", 3)
tím umožníš uživateli přidat neomezeně videí; pokud chceš omezit počet provedeš následující select s počtem výsledků a přidání povolíš, jen pokud je počet <n

jejich výpis (pro jednoho uživatele):
SELECT * FROM youtube_vids WHERE uzivatel = 3 ORDER BY pridano ASC

náhodný výpis deseti videí:
SELECT * FROM youtube_vids ORDER BY RAND() LIMIT 10



v existujícím řešení (přesto silně doporučuji: předělej to):
(SELECT p_youtube_vid_1 AS video FROM USERS_TABLE WHERE p_youtube_vid_1 <> '')
UNION
(SELECT p_youtube_vid_2 AS video FROM USERS_TABLE WHERE p_youtube_vid_2 <> '')
ORDER BY RAND()
LIMIT 10
Grs
Profil *
To by se mi zrovna hodilo, ale je to na mne už moc složité, protože i když to pochopím, tak prostě netuším, jak to do toho phpBB nacpat.
Grs
Profil *
Mimochodem mockrát děkuji za reakce.

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:

0