Autor Zpráva
Marecek_1
Profil *
Ahoj, řeším zda je možné porovnávat buňku ve které je více údajů.

Do teď jsem používal následující SQL

$mesto=array(praha,brno,ostrava);

$dotaz=mysql_query("SELECT * FROM tabulka WHERE mesto IN ('" . implode("', '", $mesto) . "')");


Ale nyní nastala situaci, kdy do DB zapisuju řádky, které jsou totožné, mají pouze jinou buňku ID(auto) a buňku město. Je to asi 5% všech řádků.
Co je lepší, nechat zapsat tento témeř totožný záznam a při výpisu dat z DB nějak odstranit duplicitu

nebo

upravit zapis tak, aby se nepřidal celý nový řádek, ale upravit stávající respektive buňku město,
kde nebude jako do teď např. praha, ale praha;ostrava;plzen

Osobně se mi více líbí ta druhá varianta, ale nevím jak složit SQL dotaz. Jelikož by se vlastně porovnavala dvě pole.
A take zda to nema fatální dopad na rychlost zpracování.

Moc děkuji za poznatky
Kajman_
Profil *
Jsou to stejná auta nebo jiná? Pokud jsou jiná a jen mají stejné parametry, tak není problém vypsat oboje.

Pokud je to jedno auto s více parametry, je řešením další tabulka, kde budou města přirazena k této tabulce

id_z_prvni_tabulky, id_mesta

A ta tři města budou na třech řádcích.
Knight
Profil
Řekl bych, že ta zmínka o autu "...ID(auto)..." vyjadřuje spíše auto_increment. Chtělo by to více rozepsat, o co vlastně jde.
Marecek_1
Profil *
Omlouvám se, ano u ID se jednalo o auto_increment, proto je také pokaždé jiné hodnoty.

V tabulce je několik buněk např.:
ID(auto_increment) | barva | styl | tvar | mesto | velikost | aj.

Na základě záhlaví tam vznikne např. řádek:
10 | červená | tučný | kruh | praha | 36B |

A nyní vznikne další řádek, který bude vypadat takto:
25 | červená | tučný | kruh | brno | 36B |

Jediné, co se liší je ID, to je pochopitelné...auto_increment a bunka mesto, kde není nyní praha, ale brno

A ted řeším, jak to zapsat, zda jako nový řádek a pak to nějak filtrovat nebo jen upravit bunku město na praha;brno
ID k ničemu nepotřebuji.

Při výpisu ale nutně potřebuji používat výběr z více měst, do teď, když bylo maximalně jedno město v buňce, jsem používal tento dotaz:

$mesto=array(praha,brno,ostrava);

$dotaz=mysql_query("SELECT * FROM tabulka WHERE mesto IN ('" . implode("', '", $mesto) . "')");


Takže mi to vypsalo všechny řádky z měst praha,brno,ostrava

Pokud ale použiju zápis, kdy v buňce město bude praha;brno nevím, jak poskládat SQL dotaz.

DÍKY
Marecek_1
Profil *
Nebo se bunkou mesto odkazovat na jinou tabulku?
Knight
Profil
Udělal bych druhou tabulku, ve které by bylo ID, název města a ID řádku z vaší původní tabulky. Selecty by pak vypadaly např. takhle:

SELECT * FROM `puvodni_tabulka` WHERE `id` IN (SELECT `id_z_pudovni_tabulky` FROM `nova_tabulka` WHERE `mesto` IN ('" . implode("', '", $mesto) . "'))


Pamatujte také na index, který by měl být na názvu města, když jej dotazujete.

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