MySQL haku kahdesta taulusta

Pee

Tietokannassa on kaksi taulua, users ja testi.
Users taulussa on mm. käyttäjänimet.
Jokaiselle käyttäjänimelle on oma taulu, jossa yhtenä sarakkeena on viikonnumero.
Eli users-taulu:
käyttäjänimi salasana paikkakunta
koe xxx Lappeenranta
testi xyz Helsinki
yritys yzy Tampere

testi-taulu:
viikonnumero maa tii kes tor per
41 xx xy hj iu mm
42 ki kh yf ty hj
43 gf er iö kj vc

Kysymys: Millä kyselyllä saisin vastaukseksi
testi 41 42 43
eli users-taulusta etsitään käyttäjänimi, ja samannimisestä taulusta etsittäisiin kaikki viikonnumerot?

5

973

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • jaamän

      Jokaiselle käyttäjälle oma taulu?

      Mikset nyt vaan tekis 2 taulua, vaikkapa tuo users ja testi?

      Users:
      id, nimi, salasana, paikkakunta

      Testi:
      id, userid, viikko, ma, ti, ke, to, pe
      -tuo userid sit foreign keynä osoittamaan users tauluun.

      Haku vaikka jotenkin näin
      SELECT viikko
      FROM testi
      WHERE userid=1

      taikka:
      SELECT viikko
      FROM testi INNER JOIN users ON testi.userid=users.id
      WHERE nimi='jojoomies'

      huom: en ole mysql käyttäjä niin syntaksi voi hieman heitellä. Idis pitäs olla selvä kuitenkin.

    • -....................

      En puutu kantasuunnitteluusi, mutta itse tekisin toisin.

      User-taulu
      id | käyttäjänimi | salasana | paikkakunta
      1 | käyttäjä1 | salasana1| testikaupunki


      Testi-taulu
      id | uid | viikonnumero | päivä | tietoa
      1 | 1 | 41 | 1 | kävin syömässä


      testi taulussa, id jokaiselle tiedolle yksinöllinen, uid = käyttäjän id (user-taulussa) paiva = (ma = 1, ti = 2 jne....) tietoa sarakkeeseen tallennat jotain tekstiä



      ------------------------------------


      Millä ehdolla haet user taulusta, jos käyttäjänimellä, niin eikö voi tehdä yhtä kyselyä suoraan testitauluun?

      • Pee

        Users-taulussa on id-sarake valmiina ja saan helposti muutettua sen muihinkin tauluihin.
        Miten haku menisi siinä tapauksessa?

        Kokeilin myös yhtä taulua jossa olisi sekä yritys, viikko ja päiväsarakkeet.
        Rivit menevät siellä:
        Yritys | vko | maa | tii | jne...
        testi | 42 | xx | yy | zz
        testi | 43 | tr | uu | ll

        Millä haulla tuosta saisi vastauksen testi 42 43?


      • -....................
        Pee kirjoitti:

        Users-taulussa on id-sarake valmiina ja saan helposti muutettua sen muihinkin tauluihin.
        Miten haku menisi siinä tapauksessa?

        Kokeilin myös yhtä taulua jossa olisi sekä yritys, viikko ja päiväsarakkeet.
        Rivit menevät siellä:
        Yritys | vko | maa | tii | jne...
        testi | 42 | xx | yy | zz
        testi | 43 | tr | uu | ll

        Millä haulla tuosta saisi vastauksen testi 42 43?

        Tosta minun esimerkistäni halutun tiedon saisi näin


        SELECT * FROM user JOIN testi USING(uid) WHERE kayttajanimi = 'jaana'


        Tämä näyttää kaikki tiedot mitkä on lisätty jaanan nimellä.

        USING määrää mikä sarake on yhdistävä tekiä kanhden taulu välillä, tässätapauksessa uid (userid)

        JOIN liittää toisentaulun

        Muut varmaan tiedätkin?

        Aikasemmassa oli pien virhe, user-taulun id pitää olla uid nimeltään, jotta toi toimii.


        User-taulun uid ja testi-taulun id kannattaa pistää auto_increment jolloin arvo kasvaa automaattisesti aina yhdellä, sekä kannattaa määritellä sarakkeet uniikeis, tällöin kaksi ihmistä ei voi saada samaa uid tunnusta.



        *Kokeilin myös yhtä taulua jossa olisi sekä yritys, viikko ja päiväsarakkeet.*

        Ihan hyvä, mutta entäs jos samanapäivänä joku tekee kaksi asiaa tai entäs jos joku tekee viikossa vain yhden asian? tällöin tulee ongelmia sekä kannassa on turhaan tyhjiä tietoja.


        En tiedä mihkä käyttötarkoitukseen toi tulee, yks keino on jättää pois minun esimerkistä viikonnumero | päivä sarakkeet ja korvata ne datetimellä(tai timestampilla) niistäkin pystyy hakemaan päivän ja viikon perusteella.


      • -.............
        Pee kirjoitti:

        Users-taulussa on id-sarake valmiina ja saan helposti muutettua sen muihinkin tauluihin.
        Miten haku menisi siinä tapauksessa?

        Kokeilin myös yhtä taulua jossa olisi sekä yritys, viikko ja päiväsarakkeet.
        Rivit menevät siellä:
        Yritys | vko | maa | tii | jne...
        testi | 42 | xx | yy | zz
        testi | 43 | tr | uu | ll

        Millä haulla tuosta saisi vastauksen testi 42 43?

        Tässä on sulle nopeesti tehty esimerkki muutamalla kyselyl, laita data kantaasi niin voit testata. Älähämmästy, tota pitkää merkkijonoa, se on vain päivämäärä binääri muodossa (myslin tapa tallettaa päivä)

        CREATE TABLE `user` (
        `uid` int(11) NOT NULL auto_increment,
        `kayttaja` varchar(100) NOT NULL default '',
        UNIQUE KEY `uid` (`uid`)
        ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


        INSERT INTO `user` VALUES (1, 'jaana');
        INSERT INTO `user` VALUES (2, 'jenna');







        CREATE TABLE `tiedot` (
        `id` int(11) NOT NULL auto_increment,
        `uid` int(11) NOT NULL default '0',
        `paiva` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
        `tieto` text NOT NULL,
        UNIQUE KEY `id` (`id`)
        ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


        INSERT INTO `tiedot` VALUES (1, 1, 0x323030342d31302d31372032333a33383a3136, 'Jaanan eka tieto');
        INSERT INTO `tiedot` VALUES (2, 2, 0x323030342d31302d31372032333a33383a3434, 'Jennan eka tieto');
        INSERT INTO `tiedot` VALUES (3, 2, 0x323030342d31302d31372032333a33393a3436, 'Jennan toka tieto');
        INSERT INTO `tiedot` VALUES (4, 2, 0x323030342d31302d31382032333a34303a3031, 'Jennan kolmas tieto');
        INSERT INTO `tiedot` VALUES (5, 1, 0x323030342d31302d31372032333a34343a3139, 'Jaanan toka tieto');









        Käyttäjä jennan tiedot
        SELECT * , DATE_FORMAT( paiva, 'viikko %v' ) AS viikko
        FROM user
        JOIN tiedot
        USING ( uid )
        WHERE kayttaja = 'jenna'

        uidkayttajaiduidpaivatietoviikko
        2jenna222004-10-17 23:38:44Jennan eka tietoviikko 42
        2jenna322004-10-17 23:39:46Jennan toka tietoviikko 42
        2jenna422004-10-18 23:40:01Jennan kolmas tietoviikko 43


        Kaikki tälläviikolla olevat tiedot (HUOM: kun tein viikko oli 42)
        SELECT * , DATE_FORMAT( paiva, 'viikko %v' ) AS viikko
        FROM user
        JOIN tiedot
        USING ( uid )
        WHERE YEARWEEK( paiva, 1 ) = YEARWEEK( NOW( ) , 1 )

        1jaana112004-10-17 23:38:16Jaanan eka tietoviikko 42   
        2jenna222004-10-17 23:38:44Jennan eka tietoviikko 42      
        2jenna322004-10-17 23:39:46Jennan toka tietoviikko 42
        1jaana512004-10-17 23:44:19Jaanan toka tietoviikko 42


        Tän vuoden viikko 43 tiedot
        SELECT * , DATE_FORMAT( paiva, 'viikko %v' ) AS viikko
        FROM user
        JOIN tiedot
        USING ( uid )
        WHERE YEARWEEK( paiva, 1 ) = '200443'

        2jenna422004-10-18 23:40:01Jennan kolmas tietoviikko 43




        Kaikki maanantaina olevat tiedot (1= sunnuntai jne.....)
        SELECT * , DATE_FORMAT( paiva, 'viikko %v' ) AS viikko
        FROM user
        JOIN tiedot
        USING ( uid )
        WHERE DAYOFWEEK( paiva ) = 2

        2jenna422004-10-18 23:40:01Jennan kolmas tietoviikko 43


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Räppäri kuoli vankilassa

      Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "
      Maailman menoa
      98
      4446
    2. Välillä kyllä tuntuu, että jaat vihjeitä

      Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella
      Ikävä
      29
      3303
    3. No kyllä te luuserit voitte tehdä mitä vaan keskenänne, sitä en ymmärrä miksi pelaat,nainen

      Pisteesi silmissäni, edes ystävätasolla tippui jo tuhannella, kun sain selville pelailusi, olet toisen kanssa, vaikka ol
      Ikävä
      45
      2370
    4. Missä näitte viimeksi?

      Missä näit kaivattua viimeksi ja oliko sähköä ilmassa?
      Ikävä
      35
      1378
    5. Minulla on käsitys

      Ettet ole kovin se k s uaalinen ihminen.
      Ikävä
      34
      1113
    6. Harmittaako sinua yhtään?

      Tuntuuko pahalta ollenkaan?
      Ikävä
      32
      1036
    7. Puukotus yöllä

      Oli kaveri hermostunut ja antanut puukosta.
      Sotkamo
      12
      1033
    8. 158
      997
    9. rakas J siellä jossain

      Niin ikävä sua. -P. Nainen
      Ikävä
      6
      924
    10. Masan touhut etenee

      Punatiilitalon tietotoimiston mukaan Masa on saanut viimein myytyä kämppänsä ja kaavoittaa uudelle lukaalille tonttia pa
      Äänekoski
      12
      862
    Aihe