Výsledky 1 až 10 z 10

Téma: dotaz v MySQL

  1. #1

    Standardní dotaz v MySQL

    Cus chlapci,

    lze nejakym jednoduchym zpusobem zadat SQL dotaz abych docilil nasledujici:

    mam tabulku nazvanou "maso", která obsahuje x sloupců
    - id (primary) auto increment
    - kod (varchar)
    - nazev (varchar)
    a dalsi nepodstatne...

    políčko "kod" obsahuje kod v tomto tvaru: 111-01, 241-02, 481-01 atd...
    přičemž důležitá jsou první 3 čísla před pomlčkou...
    první číslo:
    1 = drůbeží maso
    2 = vepřové
    3 = hovězí
    atd...
    druhé číslo:
    rozděluje např drůbež na kuřecí, vodní drubež, krůtí...
    třetí číslo:
    většinou pouze 1 nebo 2
    1 = mražené
    2 = chlazené
    za pomlčkou je už jen seznam 01, 02, 03 atd...

    A nyní ten SQL dotaz.
    Jak bych měl zapsat, když bych chtěl, aby se zobrazilo pouze maso např 112 (čili drůbež > kuřecí > chlazené)

    - - - - - - - - - - - - - - - - - -
    Nyní mám tyto 3 čísla rozděleny do 3 sloupců a pak můj dotaz zní takto:
    $sql = 'SELECT * FROM `maso` WHERE `zbozi` = 1 AND `druh` = 1 AND `typ` = 2 ';

    Ale chtěl jsem mít číslo v jedné buňce, ovšem nevím jak se ptát "zobraz výsledek, je-li první číslo 1, druhé 1 a třetí číslo 2".

    lze to nebo mám raději zůstat u rozdělení do 3 sloupců ?
    Paul Atreides
    NPE-squad.com - Clan Leader

    COMP: Win7 x64 prof. | C2D E8400 3Ghz | ASUS P5B DeLuxe | Corsair 6000 MB DDR2 800MHz | ASUS GTX 560 Ti 1GB-DDR5 | SB Audigy SE 7.1 | Seagate 1000GB & 500GB (šuple WD 320GB) | Corsair 520W | 26" LG fullHD 1920x1080px 8ms
    NAS-server: Win Home Server 2011 | 1,6 Atom D525 (2 core | 4 threads) | ASrock mini-ITX | 4 GB DDR3 800MHz | Western 1TB GreenPower | Fortron 200W 80-BronzePlus | ftp, web, mumble, vpn, Servio DLNA share system, komplet PLEXI case
    NetBook: ASUS Eee1001PQ (violet) | 1,6 ATOM | 1 GB RAM | 250GB HDD | 1024x600 px LCD | baterie 7h :)
    FOTO: Olympus E-520 | 14-42 ZuikoDigital | 40-150 ZuikoDigital

  2. #2
    Senior Member Avatar uživatele D_a_v_i_d
    Založen
    08.12.2002
    Bydliště
    Praha
    Věk
    42
    Příspěvky
    5 153
    Vliv
    344

    Standardní Re: dotaz v MySQL

    Co použít funkci MID()?

    http://dev.mysql.com/doc/refman/5.0/...l#function_mid

    Kód:
    SELECT * FROM maso WHERE MID(kod, 1,1) = '1' and MID(kod, 2,1) = '1' and MID(kod, 3,1) = '2'
    Naposledy upravil D_a_v_i_d; 13.09.2011 v 12:19.
    A Jedi gains power through understanding; a Sith gains understanding through power

    Destkop machine: Intel Core i5 2400/MSI P67A-C45 /2x4 GB DDR3 1333 MHz/Sapphire HD6790/22" LCD HP w2216/DSL 8MBit connected
    Na filmy v posteli: Lenovo IdeaPad S9e/1,6 GHz Intel Atom, 1 GB RAM, 80 GB HDD
    Na práci: Dell E5500/T9550 2,66 GHz Intel, 3 GB RAM, 120 GB HDD

  3. #3

    Standardní Re: dotaz v MySQL

    Ehm a co třeba like?

    Pokud bude dotaz ve tvaru '131%' tak to bere dokonce INDEXem, počet znaků které se v řetězci indexují lze definovat.

    EDIT: ten vyhledávací řetězec si doufám, můžeš v pohodě složit

    EDIT2: nenapsal jsi jakou máš granulitu a množství dat, pokud by jsi se v nějakém případě potřeboval rychle a často dotazovat pomocí zástupných znaků tj např '1_3%' tak jsou lepší samostatné sloupce, další důvod pro samostatné sloupce je NF, aby jsi mohl updatovat a měnit kódy - tj mít to jako cizí klíče do dalších tabulek vzhledem k těm parametrům co jsi vypsal, tak to jsou správně 3 extra tabulky
    Naposledy upravil mike.pr; 13.09.2011 v 12:35.

  4. #4

    Standardní Re: dotaz v MySQL

    ty kody se právě měnit nebudou, zůstanou unikátními, jsou vázané na účetní program...
    čili pokud z účta dostanu export, tak abych mohl bez nějaké menší námahy updatovat db...

    pokud bych to měl rozdělovat do 3 sloupců, samozřejmě by to šlo, ale už bych musel dělat něco navíc, a to v momentě kdy něco děláte "zdarma" pro šváru, tak se vám něco spešl dělat nechce...
    Takhle dostanu z exportu X sloupců, kde v jednom je kod "112-01" a ten už kvůli účetnictví zůstane stále stejný pro konkrétní typ zboží...

    nicméně Diky | K+ rozádny
    Paul Atreides
    NPE-squad.com - Clan Leader

    COMP: Win7 x64 prof. | C2D E8400 3Ghz | ASUS P5B DeLuxe | Corsair 6000 MB DDR2 800MHz | ASUS GTX 560 Ti 1GB-DDR5 | SB Audigy SE 7.1 | Seagate 1000GB & 500GB (šuple WD 320GB) | Corsair 520W | 26" LG fullHD 1920x1080px 8ms
    NAS-server: Win Home Server 2011 | 1,6 Atom D525 (2 core | 4 threads) | ASrock mini-ITX | 4 GB DDR3 800MHz | Western 1TB GreenPower | Fortron 200W 80-BronzePlus | ftp, web, mumble, vpn, Servio DLNA share system, komplet PLEXI case
    NetBook: ASUS Eee1001PQ (violet) | 1,6 ATOM | 1 GB RAM | 250GB HDD | 1024x600 px LCD | baterie 7h :)
    FOTO: Olympus E-520 | 14-42 ZuikoDigital | 40-150 ZuikoDigital

  5. #5

    Standardní Re: dotaz v MySQL

    Citace Původně odeslal mike.pr Zobrazit příspěvek
    EDIT2: nenapsal jsi jakou máš granulitu a množství dat, pokud by jsi se v nějakém případě potřeboval rychle a často dotazovat pomocí zástupných znaků tj např '1_3%' tak jsou lepší samostatné sloupce, další důvod pro samostatné sloupce je NF, aby jsi mohl updatovat a měnit kódy - tj mít to jako cizí klíče do dalších tabulek vzhledem k těm parametrům co jsi vypsal, tak to jsou správně 3 extra tabulky
    No takhle ty dotazy budou skoro všechny typy, protože někdy budu chtít zobrazit jen:
    - drůbež (čili kody 1xx-xx) - hlavní kategorie
    - kuřecí (čili kody 11x-xx) - subkategorie
    - kuřecí, chlazené (čili kody 112-xx) - další subkategorie

    Proto to nyní mám ve třech sloupcích, ale právě kvůli snadnému exportu z účta kde "kod" mám jako celek, jsem se domníval, že bych zkusil porovnávat jen znaky na určitých místech.
    Paul Atreides
    NPE-squad.com - Clan Leader

    COMP: Win7 x64 prof. | C2D E8400 3Ghz | ASUS P5B DeLuxe | Corsair 6000 MB DDR2 800MHz | ASUS GTX 560 Ti 1GB-DDR5 | SB Audigy SE 7.1 | Seagate 1000GB & 500GB (šuple WD 320GB) | Corsair 520W | 26" LG fullHD 1920x1080px 8ms
    NAS-server: Win Home Server 2011 | 1,6 Atom D525 (2 core | 4 threads) | ASrock mini-ITX | 4 GB DDR3 800MHz | Western 1TB GreenPower | Fortron 200W 80-BronzePlus | ftp, web, mumble, vpn, Servio DLNA share system, komplet PLEXI case
    NetBook: ASUS Eee1001PQ (violet) | 1,6 ATOM | 1 GB RAM | 250GB HDD | 1024x600 px LCD | baterie 7h :)
    FOTO: Olympus E-520 | 14-42 ZuikoDigital | 40-150 ZuikoDigital

  6. #6
    Member Avatar uživatele JoeBoB
    Založen
    11.03.2005
    Bydliště
    Kladno-Praha
    Věk
    38
    Příspěvky
    214
    Vliv
    239

    Standardní Re: dotaz v MySQL

    Dalsi reseni je jit "treti" cestou. Puvodni kod nech nezmeneny (pro ucto) vyrob dalsi tri sloupce (nemusi to byt klice do extra tabulek) a proceduru na update radku ktera ti ty tri sloupce bude doplnovat. Search muzes delat pres nove sloupce a puvodni ti zustane pro export. Pokud je ta tabulka nak vyznamne velka, v dlouhodobejsim hledisku se to urco vyplati. Samozrejme pokud tam mas par set zaznamu, staci nakej textovej search...
    Home: Core i5-2500k @ 4,2, Gelis Solution Tranquillo r.2, Patriot 2x8GB 1600MHz DDR3, Gigabyte Z77 D3H, Gigabyte R9 290 4GB GDDR5 + Windforce 3X, ASUS ASUS Xonar DX/XD, OCZ Vertex3 128GB, Samasung Spinpoint 1TB HD103UJ, Samasung Spinpoint 2TB HD204UI, Pioneer DVR-212, Corsair VX550, Thermaltake Wing RS100, Logitech UltraX Premium, A4Tech Bloody V7, Dell Ultrasharp U2412M
    Mobile: E6420, Core i-7 2720QM, RAM 4GB 1333MHz, SSD 128GB, NVIDIA NVS 420M, 1600x900
    ...default, zatim

  7. #7

    Standardní Re: dotaz v MySQL

    Citace Původně odeslal JoeBoB Zobrazit příspěvek
    Dalsi reseni je jit "treti" cestou. Puvodni kod nech nezmeneny (pro ucto) vyrob dalsi tri sloupce (nemusi to byt klice do extra tabulek)...
    Jo to mne taky napadlo.... Ale jak jsem před chvílí zkoušel, tak to co poslal DAVID funguje v pohodě..., tzn nemusel bych dělat další sloupce. Otázka je jestli se neobjeví jiné problémy..

    Jinak celkem se jedná asi o 300 položek.



    ADD - 800tý příspěvek - jdu otevřít láhev
    Paul Atreides
    NPE-squad.com - Clan Leader

    COMP: Win7 x64 prof. | C2D E8400 3Ghz | ASUS P5B DeLuxe | Corsair 6000 MB DDR2 800MHz | ASUS GTX 560 Ti 1GB-DDR5 | SB Audigy SE 7.1 | Seagate 1000GB & 500GB (šuple WD 320GB) | Corsair 520W | 26" LG fullHD 1920x1080px 8ms
    NAS-server: Win Home Server 2011 | 1,6 Atom D525 (2 core | 4 threads) | ASrock mini-ITX | 4 GB DDR3 800MHz | Western 1TB GreenPower | Fortron 200W 80-BronzePlus | ftp, web, mumble, vpn, Servio DLNA share system, komplet PLEXI case
    NetBook: ASUS Eee1001PQ (violet) | 1,6 ATOM | 1 GB RAM | 250GB HDD | 1024x600 px LCD | baterie 7h :)
    FOTO: Olympus E-520 | 14-42 ZuikoDigital | 40-150 ZuikoDigital

  8. #8
    Administrátor mince Avatar uživatele Jezevec
    Založen
    08.10.2002
    Bydliště
    Teplice
    Příspěvky
    6 736
    Vliv
    300

    Standardní Re: dotaz v MySQL

    Taky mame funkci left(pole,kolik), ktera bude zrejme o fous jednodussi a rychlejsi nez mid (http://dev.mysql.com/doc/refman/5.0/...functions.html). Predpokladam samo ze ses schopen poskladat ty tri cisla do jednoho stringu takze neco jako

    Kód:
    SELECT * FROM maso WHERE left(kod, 3) = '123'
    Jinak pro 300 zaznamu je to putna, ale kdyby se to melo rozrust, tak textovy hledani je extremne pomaly + pripadny join je uz vylozene zhuverilost.
    IMPROBE AMOR, QUID NON MORTALIA PECTORA COGIS - krutá jsi, lásko, kam až ty doženeš smrtelná srdce -- Vergilius
    Mnoho je prostředků, které léčí lásku, ale žádný není spolehlivý.
    S tím, čeho se na nás dopustili druzí se už nějak vyrovnáme. Horší je to s tím, čeho jsme se na sobě dopustili sami.
    -- Francois La Rochefoucauld
    Nabídnout přátelství tomu, kdo chce lásku, je jako dát chleba tomu, kdo umírá žízní.

  9. #9

    Standardní Re: dotaz v MySQL

    urcite je lepsi pouzivat textovy hledani, nez funkci na sloupec ...
    to co navrhuje joebob by bylo asi nejlepsi reseni v momente, kdy bys potreboval hledat napr x11-xxxx
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  10. #10
    Administrátor マツダ mince Avatar uživatele Marty
    Založen
    07.10.2002
    Bydliště
    Praha, Sanctuary
    Věk
    41
    Příspěvky
    8 225
    Vliv
    300

    Standardní Re: dotaz v MySQL

    Už tady všechny rozumný nápady padly, ale ještě bych si dovolil jeden námět - sice není v tomhle případě příliš vhodnej, ale řešil by hledání v případě, že by bylo nutné používat MID() - udělat si na to view.
    create view ...
    as
    select
    left(kod, 1) kategorie,
    mid(kod, 2,1) subkategorie

    from tabulka


    Jinak fakt LIKE je nejlepší nápad, pracovat se zástupnými znaky... % je klasika, mike.pr správně upozornil taky na _ ...
    CUBE> 3570K IHS mod@ 4.4 GHz + NH-U9B ◦ 16 GB ◦ ASUS P8Z77-M ◦ HD7850 2GB @ 1110/5480 + Mk 26 ◦ 240 GB SSD ◦ SS-II 380 W ◦ LIAN LI PC-V351B plexi mod ◦ LG IPS231p
    WORK> HP EliteBook 840 G5 ◦ i7 8550U 1.8/4.0 GHz ◦ 32 GB DDR3 ◦ 512 GB nVME SSD ◦ 14.1" 1920x1080 LED + 2x 24" ASUS FullHD ◦ Win10 Enterprise
    SERVER> HP ProLiant Microserver Gen8 ◦ Intel Core i5-3540T ◦ 16 GB DDR3 ◦ 180 GB SSD + 4 TB WD GREEN + 3x3 TB WD RED RAID5 ◦ 10GbE NIC
    PHOTO> Canon EOS 70D ◦ EF 70-200/4L ◦ EF-S 10-18 STM ◦ EF 50/1.8II ◦ EF-S 40/2.8 STM ◦ Yongnuo YN-568EX ◦ Tamrac 5534
    HOMECINEMA> TV Samsung LE40B650 40" FullHD ◦ DVD Pioneer DV-310K ◦ AVR Yamaha RX-V359 ◦ SPK Dexon Allegro 5.0
    OTHERSTUFF> Mikrotik RB750GL ◦ HP PS1810-8G ◦ UniFi AP AC LR ◦ OKI MB461
    ◦ Canon PiXMA MG5350

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. mySQL dotaz s příkazem UPDATE
    Založil Atreides v sekci fóra Programování
    Odpovědí: 2
    Poslední příspěvek: 27.01.2011, 14:31
  2. [mySQL] Dotaz
    Založil ZeeZ v sekci fóra Programování
    Odpovědí: 5
    Poslední příspěvek: 29.11.2005, 18:16
  3. MYSQL - dotaz
    Založil cd-mann v sekci fóra Programování
    Odpovědí: 13
    Poslední příspěvek: 01.11.2004, 22:25
  4. [MySQL] vyberovy dotaz
    Založil ripper v sekci fóra Programování
    Odpovědí: 12
    Poslední příspěvek: 31.08.2004, 15:04
  5. MySQL dotaz
    Založil FlashedBrain v sekci fóra Programy a problémy s nimi
    Odpovědí: 8
    Poslední příspěvek: 14.03.2003, 18:25

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •