Autor | Zpráva | ||
---|---|---|---|
sloncz Profil |
#1 · Zasláno: 18. 5. 2014, 11:34:45
Dobrý den, pracuji na databázi zvířat a v databázi mám vždy druh toho zvířete ve tvaru druh="druh1, druh2", protože některá zvířata mají dva druhy a některá jen jeden.
Poté mám na webu výpis, kolik zvířat je toho a toho druhu, ovšem problém je v tom, že nevím, jak zjistit, kolik zvířat má druh="druh1". Zkoušel jsem $pocet_zvirat= mysql_num_rows(mysql_query("SELECT * FROM zvirata_all WHERE druh='druh1'")); ale to nejde, protože v DB je ve sloupečku druh "druh1, druh2" a ne pouze druh1 nebo druh2. Vůbec si envím rady a ani nevím, jestli je to takto možné. Mohl by mi prosím někdo poradit? :) |
||
juriad Profil |
NIKDY do jednoho sloupce nezapisuj více hodnot oddělených čárkami. Databáze s takovými záznami neumí efektivně zacházet.
Můžeš zkusit dotaz: SELECT * FROM zvirata_all WHERE druh LIKE '%druh1%' Navíc ten dotaz bude fungovat, jen když žádný druh není podslovem jiného (na dotaz ryba ti najde i velryba). Složitější dotazy nepůjde realizovat skoro vůbec. Spravným řešením je přidat tabulku druhy_zvirat, která bude mít dva sloupce: zvíře a druh a při dotazu provádět JOIN. Článek k tématu: http://www.manualy.net/article.php?articleID=13; kapitola 1. normální forma |
||
sloncz Profil |
#3 · Zasláno: 18. 5. 2014, 12:01:08
Takže bude lepší, když si vytvořím ještě sloupek "druh1" a "druh2", vytáhnu si hodnotu z "druh", tu pomocí explode rozdělím a nechám zapsat odděleně do pole druh1 a druh2?
|
||
juriad Profil |
#4 · Zasláno: 18. 5. 2014, 12:07:16
Ne. Vytvoříš novou tabulku, která bude přiřazovat každému zvířetí druhy. Jeden řádek = jedno přiřazení jednoho druhu jednomu zvířeti. Pro jedno zvíře tedy může existovat více řádků.
Pak dotaz bude: SELECT * FROM zvirata_all z JOIN zvirata_druhy zd ON z.id = zd.zvire WHERE zd.druh = 'druh1' Transformaci provedeš explodem v PHP a insertem záznamů do této nové tabulky. Sloupec druh v tabulce zvirata_all úplně zrušíš. |
||
sloncz Profil |
Dobře děkuji, Teď mi jde o to, vytáhnout náhodné zvíře z DB, ale musí se druh1 nebo druh2 rovnat "plaz".
Napadlo mě získat si pomocí mysql_num_rows počet zvířat, které mají jako druh1 nebo druh2 "plaz" ale nevím jak z nich náhodně vybrat jednoho z nich :/ Předem děkuji. |
||
juriad Profil |
K dotazu pro vytažení všech záznamů přidej:
ORDER BY RAND() LIMIT 1 Podmínku přeformuluješ třeba na: WHERE zd.druh IN ('druh1', 'druh2') Stejně jako nikdy ukládat více hodnot do jednoho sloupce, nechceš z podobných důvodů mít číslované sloupce. Některé časteji řešené dotazy pro MySQL - FAQ » Musíte pojmenovávat sloupce s indexem (jmeno1, jmeno2, jmeno3, …) |
||
Časová prodleva: 10 let
|
0