MySQL 15 - Seznamka

Věrným pomocníkem Amorka je luk, šíp a mohla by to být i naše seznamka:).

Seznamka – není to fraška?

Dnes se podíváme na vývoj další z typických webových aplikací, vedle diskusí a chatu se totiž hojně objevují i různé seznamky. Pro doplnění bych dodal, že se v budoucnu budeme taky zaobírat jednoduchým rozesílačem informačních emailů našim klientů dle databáze, dále jednoduchým publikačním systémem a na konec i seznamem odkazů. Začneme ale u jednodušší služby, totiž seznamky. Co si pod tímto pojmem představit, kolik jich je na českém internetu a proč bychom měli tvořit naši vlastní?

Seznamka je hledání životní partnera … ale i práce!

Seznamka je obecně instituce, která na základě databáze lidí, kteří se chtějí seznámit, tyto lidi nabízí formou nějaké prezentace dalším lidem, kteří se chtějí seznámit. V případě internetu si asi každý dovede představit kategorie seznamky – On hledá ji, Ona hledá jeho, On hledá jeho, Ona hledá ji. Lze je samozřejmě rozšířit i o různé podoby seznámení – Jen vážně, Sex, Kamarádství apod., stejně tak lze všechny příspěvky v seznamce různě filtrovat a třídit podle věku, místa bydliště, kuřáctví a dalších důležitých parametrů.

Klepněte pro větší obrázek

… jedna z českých seznamek:) …

Obecně lze však model seznamky přirovnat i k bazaru či pracovní seznamce – nabízím práci, hledám práci, - dále na jak dlouho tato práce bude a v jakém pracovním poměru, požadované/nabízené schopnosti, to jsou všechno položky, které lze až na finální systém filtrování a prohledávání databáze tvořit coby celek obdobně jako seznamku.

To je jeden ze základních aspektů webových aplikací a databázových struktur – řada požadovaných řešení je si hodně podobná a tvořit vždy celý systém znovu je neefektivní. Představme si tedy případ firmy, která tvoří rybářské weby. Většinou se liší pouze v grafickém zpracování, ale jsou založeny na stejném „jádru“. Nemělo by cenu tedy při tvorbě nového dalšího serveru o rybách vše dělat nově, stačí změnit grafiku. Totéž lze použít i pro změnu naší seznamku na databázi rybářských potřeb, kdy někdo nějaké prodává, někdo je zase kupuje – pouze změníme význam některých položek v tabulce, ale celý systém zůstane stejný.

Proto dnes budeme stavět seznamku, je svou konstrukcí blízko řadě jiných možných řešení a proto se nám bude hodit! Jak je to tedy se seznamkami na českém internetu? Rozhodně máme několik gigantů, jako u všech „tuctových“ webových aplikací, kteří pokrývají poměrnou část trhu.

Dále jsou seznamky specializované na konkrétní obory, kdy již třeba nehledáme životního, ale tanečního partnera. Pokud bychom chtěli tvořit seznamku v rámci oboru, který ještě žádnou nemá (třeba rybáři myslím:)), máme šanci na její úspěch. Potom už bude na originalitě grafického provedení záležet méně, půjde spíš o zájem ze strany cílové skupiny – najde se dostatek rybářů serfařů, kteří se budou chtít seznámit na internetu?

Základ seznamky

Nebylo by od věci, kdybychom si stanovili jak bude naše seznamka fungovat než ji začneme budovat. Bude tedy obsahovat 4 zmiňované kategorie pro základní třízení, každý uživatel se do této kategorie zařadí podle volby moje pohlaví a hledám ji, jeho, je mi to jedno. Každý seznámení chtivý návštěvník také povinně zadá při registraci kontaktní email, svůj věk a kraj, v němž bydlí. Strukturu seznamky tedy vytvoříme třeba takto (nejprve vytvoříme systém, kdy jeden uživatel má automaticky jeden inzerát, potom uživatele, který může vkládat více inzerátů – v praxi se to dá převést na inzeráty na prodej zboží, taky je možnost prodávat více kusů zboží):

Uživatelé systému a inzeráty v jedné tabulce

Klepněte pro větší obrázek

Do této tabulky budeme ukládat jednotlivé uživatele – jejich jméno, přezdívku, vstupní heslo, emailovou adresu, nepovinně poštovní adresu a dále identifikační čísla pro určení jejich kraje, pohlaví, pohlaví které hledají, jejich kuřácký stav a jaký by měl mít kuřácký stav jejich protějšek. Nakonec bude tabulka obsahovat i popis dané osoby. Tabulka se tedy vytvoří následovně:

MySQL_Query("Create table seznamka_users(
ID int not null primary key auto_increment,
Jmeno varchar(250) not null,
Prezdivka varchar(250) not null,
Heslo blob not null,
Email varchar(250) not null,
Ulice varchar(150),
Mesto varchar(50),
PSC varchar(10),
KrajID int not null,
PohlaviID int not null,
HledaPohlaviID int not null,
KoureniID int not null,
HledaKoureniID int not null,
Popis blob not null)");

Kraje

Klepněte pro větší obrázek

V této tabulce budou umístěny pouze kraje a jejich jména, proto je její konstruování snadné:

MySQL_Query("Create table seznamka_kraje(
ID int not null primary key auto_increment,
Kraj varchar(250) not null)");

Pohlaví

Klepněte pro větší obrázek

Tato tabulka by měla čítat v základním provedení záznamy Muž, Žena a Oboje. V praxi se pro vlastní pohlaví uživatele bude moci použít Muž nebo Žena a pro hledané pohlaví i položka Oboje. Identifikačním klíčem ke jménům bude opět unikátní číselné automaticky narůstající ID. Tabulka by mohla ještě obsahovat speciální pohlaví jako UFO, Pupíkofil apod.

MySQL_Query("Create table seznamka_pohlavi(
ID int not null primary key auto_increment,
Pohlavi varchar(250) not null)");

Kouření

Klepněte pro větší obrázek

U položky kouření se na rozdíl od pohlaví dá vycházet z toho, že bude mít vždy maximálně 3 druhy záznamů – Kuřák, Nekuřák a Je to jedno. Proto pro změnu nemusíme ani mít tabulku a automaticky vkládat do tabulky přímo záznam a lá 0,1 a 2 – u vlastního kouření to bude moci být pouze 1 a 2 jako Kuřák a Nekuřák a u cizího i 0 pro Je mi to jedno. Použití tabulky pro načítání jmen stavů znamená však výhodu při změně jména položky, nemusíme šmátrat ve skriptech a jednoduše změníme záznamy v tabulce, která by vypadala opět takto:

MySQL_Query("Create table seznamka_koureni(
ID int not null primary key auto_increment,
Koureni varchar(250) not null)");

Operace před vložením inzerátu

Nyní si postupně popíšeme, jak by v praxi probíhalo přidávání a následné zpracování inzerátu v databázi. Na začátku by se objevil registrační formulář. V tom by se výběrové položky v SELECTECH generovali podle našich tabulek, takže třeba stavy kouření bychom získali v jazyku PHP takto (pouze důležitá část skriptu):

<select name=KoureniID>
<?
@$query=MySQL_Query(“Select * from seznamka_koureni”);
while($fetch=MySQL_Fetch_Array($query)):
$Idcko=$fetch[“ID”];
$Koureni=$fetch[“Koureni”];
echo“<option value=“.$Idcko.“>”.$Koureni.”</option>“;
endwhile;
?>
</select>

Uživatel by vyplnil formulář a veškerá data by se již mohla zapsat do databáze po jeho odeslání v takovém formátu, v jakém by byla přijata – hodnoty výběrových polí jsou automaticky odesílány jako ID z jejich tabulek. Při vypisování inzerátů bychom pak třídili základní kategorie takto:

if(($PohlaviID==0)and($HledaPohlaviID==0)) … možnost 1
if(($PohlaviID==1)and($HledaPohlaviID==0)) … možnost 2
if(($PohlaviID==1)and($HledaPohlaviID==1)) … možnost 3
if(($PohlaviID==0)and($HledaPohlaviID==1)) … možnost 4

Toto by při SQL dotazu bylo v podmínkovém tvaru Where. Na další obrazovce bychom vypsali seznam krajů pro výběr – opět dle jednoduchého modelu výběru jmen a jejich výpisu z tabulky seznamka_kraje. Pokud na ně uživatel klikne, začne již výpis samotných inzerátů. Toto by ještě nebylo nic náročného, šlo by tak vystavět i naše vyhledávání, ale co když by uživatel chtěl hledat osoby, které mají ve svém popisu slovo mazlík? Potom bychom použili třeba následující dotaz s použitím jazyka PHP:

$Hledanyretezec=“mazlík“;
$p1="Popis Like `%".AddSlashes($Hledanyretezec)."%`";

$queries=MySQL_Query("Select * from seznamka_uzivatele where $p1");

V případě více podmínek by náš filtr mohl vypadat i takto:

$Hledanyretezec=“mazlík“;
$goon=0;

if($Hledanyretezec1!=““):
$p1="Popis Like `%".AddSlashes($Hledanyretezec1)."%`";
$goon==1;
endif;

if(($Hledanyretezec2!=““)and($goon!=1)):
$p2="Popis2 Like `%".AddSlashes($Hledanyretezec2)."%`";
$goon==1;
elseif($Hledanyretezec2!=““):
$p2="and Popis2 Like `%".AddSlashes($Hledanyretezec2)."%`";
endif;

$queries=MySQL_Query("Select * from seznamka_users where $p1 $p2");

Jde zde o používání spojky AND a jak vidíte, pokud si označíme první použití některé z podmínek, u té další již víme že musíme použít spojky AND a ve finále pouze naskládáme podmínky za sebe v dotazu a pokud budou platné, poskládají korektně i celý dotaz a to i v případě, že některá nebude mít hodnotu. Tím jsme si prošli všechny základní problémy při reprezentaci naší seznamky a nyní se ještě podíváme, jak by šlo seznamku rozšířit o možnost více inzerátů od jednoho uživatele. Jednoduše vytvoříme tabulku uživatelů a tabulku inzerátů:

Klepněte pro větší obrázek

MySQL_Query("Create table seznamka_users(
ID int not null primary key auto_increment,
Jmeno varchar(250) not null,
Prezdivka varchar(250) not null,
Heslo blob not null,
Email varchar(250) not null,
Ulice varchar(150),
Mesto varchar(50),
PSC varchar(10))");

Po tabulce osobních dat uživatele následuje již nová tabulka se samotnými inzeráty.

Klepněte pro větší obrázek

Při vypisování inzerátů pak nahradíme ID uživatele za jeho přezdívku coby odkaz na jeho osobní info a dílo je dovršeno.

MySQL_Query("Create table seznamka_inzeraty(
ID int not null primary key auto_increment,
userID varchar(250) not null,
KrajID int not null,
PohlaviID int not null,
HledaPohlaviID int not null,
KoureniID int not null,
HledaKoureniID int not null,
Popis blob not null)");

Příští pokračování

Za týden se podíváme na další typ databázového systému, totiž jednoduchý publikační systém.

Diskuze (9) Další článek: Xabre už se prodává !

Témata článku: Software, Seznamka, Programování, Základní aspekt, Select, Základní možnost, Základní struktura, Like, Základní kategorie, Finální systém, MySQL, UFO, Nota, Základní popis, Code

Určitě si přečtěte


Aktuální číslo časopisu Computer

Jak rychlé je nabíjení bez drátů?

Test 11 sluchátek pro hráče

Aplikace, které vám zachrání dovolenou

Kompletní přehled datových tarifů