Muutama kysymys

kyselystä

On kolme taulua:

Pizzat (id, nimi)
Ainekset (id, nimi)
Pizzansisalto (id, id_pizza, id_aines)

Data vaikka:

Pizzat:
1, Salamipitsa
2, Jauhelihapitsa

Ainekset:
1, Pohja
2, Juusto
3, Jauheliha
4, Salamia
5, Tomaatti

Sisalto:
1, 1, 1
2, 1, 2
3, 1, 4
4, 2, 1
5, 2, 2
6, 2, 3
7, 2, 5


Kysymys1:
Millä kyselyllä saa selville missä pizzoissa on esim. juustoa? Juuston id ei ole tiedossa etukäteen.

Kysymys2
Pitäisi lisätä uusi pizza: Vegaanipizza, jonka ainekset olisivat: pohja, juusto, tomaatti ja sienet. Miten tämä kannattaisi toteuttaa? Pohja, juusto ja tomaatti ovat jo olemassa ainekset taulussa ja sienet on uusi raaka-aine, mutta emmehän sitä tiedä.

Kysymys3
Salaamispitsan uusi koostumus on pohja, salami ja sienet. Yksi aines havisi ja toinen tuli tilalle, mutta emme tiedä mikä, miten tämä kannattaisi toteuttaa?

4

406

    Vastaukset 4

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • alkup.

      Niin ja käytössä on MySQL tietokanta, ja ohjelma toteutetaan PHP kielellä, jos sillä on väliä.

    • tohlo

      Oletkohan mahdollisesti opiskellut php-kieltä (tai yleensäkin ohjelmointia) ja tietokantojen käyttöä (sql)? Nimittäin kysymyksesi ovat aika tavalla perusasioita, joten vähintäänkin sql:n perusosaaminen olisi suotavaa.

      Valmiit ratkaisut kohdekielellä tuskin hyödyttäisivät niin paljoa kuin ideat. Silti suosittelen jotain sql-alkeisopasta tjmv.

      Kysymykseen 1: etsit juustoja sql:n like-operaattorin ja jokerimerkkien avulla (sql: select). Juuston id:tä ei tarvitsekaan tietää etukäteen. (Jokerimerkkien käyttö riippuu siitä haluatko tietää myös muunlaiset juustot, esim. homejuustot?)

      Kysymykseen 2: käyttöliittymän pitää ekana lisätä pizzat-tauluun rivi (sql: insert into) ja sitten käydä uuden pitsan ainekset yksi kerrallaan läpi, lisäten jos ei jo löydy (ota huomioon myös kirjoitusasu, esim. "juusto" vs. "juustoa"). Siispä "sienet" tulisi lisättyä tässä (ellet jollakin tekoälyllä tjmv. saa pääteltyä että esim. "sieniä"-ainekset jo löytyykin).

      Kysymykseen 3: poistat sisalto-taulusta ylimääräiset pitsan aineksiin viittaavat rivit (sql: delete) ja lisäät uudet (sql: insert into).

      • kiitos.

        >Kysymykseen 1: etsit juustoja sql:n like-operaattorin ja jokerimerkkien avulla (sql: select)

        Niin, mutta saako (jos saa niin miten) pizzanimen selville yhdellä kyselyllä. Tietenkin voi ensin etsiä juuston id, ja sitten katsoa missä pizzoissa on juustoa, mutta entäs yhdellä kyselyllä?

        >Kysymykseen 2: sitten käydä uuden pitsan ainekset yksi kerrallaan läpi, lisäten jos ei jo löydy

        Ei siis ole olemassa sellaista toimintoa "lisää vain jos ei ole olemassa jo" Niin minä luulinkin, mutta kysyinkin, ehkä on olemassa joku helpompi tapa.

        >Kysymykseen 3: poistat sisalto-taulusta ylimääräiset pitsan aineksiin viittaavat rivit (sql: delete) ja lisäät uudet (sql: insert into).

        Voihan ne yksitellenkin tarkistaa ja sitten poistaa, itse kyllä ajattelin että voisi poistaa kerralla kaikki pizzan ainekset, ja sitten lisätä vain uudet. Luulin, että onko joku "kehittyneempi" / "fiksumpi" tapa tähänkin.


      • tohlo
        kiitos. kirjoitti:

        >Kysymykseen 1: etsit juustoja sql:n like-operaattorin ja jokerimerkkien avulla (sql: select)

        Niin, mutta saako (jos saa niin miten) pizzanimen selville yhdellä kyselyllä. Tietenkin voi ensin etsiä juuston id, ja sitten katsoa missä pizzoissa on juustoa, mutta entäs yhdellä kyselyllä?

        >Kysymykseen 2: sitten käydä uuden pitsan ainekset yksi kerrallaan läpi, lisäten jos ei jo löydy

        Ei siis ole olemassa sellaista toimintoa "lisää vain jos ei ole olemassa jo" Niin minä luulinkin, mutta kysyinkin, ehkä on olemassa joku helpompi tapa.

        >Kysymykseen 3: poistat sisalto-taulusta ylimääräiset pitsan aineksiin viittaavat rivit (sql: delete) ja lisäät uudet (sql: insert into).

        Voihan ne yksitellenkin tarkistaa ja sitten poistaa, itse kyllä ajattelin että voisi poistaa kerralla kaikki pizzan ainekset, ja sitten lisätä vain uudet. Luulin, että onko joku "kehittyneempi" / "fiksumpi" tapa tähänkin.

        Onhan niitä keinoja.

        K1: esim. select p.nimi, a.nimi
        from pizzat as p, ainekset as a, sisalto as s
        where p.id=s.id_pizza and a.id=s.id_aines
        and lower(a.nimi) like '%juusto%'
        order by p.nimi, a.nimi;

        %juusto% hakee kaikki erilaiset juustot. Harjoitus: ota jokerimerkkejä pois jos haluat vain normaalin juuston. ;)

        Suosittelen tutustumaan sql-oppaissa joineihin ja hakuihin useammasta taulusta. :)

        K2: tuo "lisää vain jos ei jo olemassa" onnistuu käyttämällä (mahdollisesti epästandardeja tapoja), esim. kun oletetaan että id-kenttä täytetään automaattisesti autonumber-tyyppisenä kenttänä tjmv.:

        insert into ainekset (nimi)
        select distinct 'Sienet' from ainekset
        where lower(nimi) not like '%sienet%';

        Tuollainen pitää vaan tehdä dynaamisesti PHP:ssa, eli korvata aineksen nimi tuohon esimerkkiin kahdesti (lisättävällä nimellä ja taulusta etsittävällä nimellä ml. kirjainkoko, sijamuodot, ym.). Tällainen dynaaminen tarkistus ja lisäys täytyy siis suorittaa jokaiselle uuden pitsan ainekselle. (Ja vielä jää miettimättä se miten käyttöliittymässä saat pitsanluontisivulla esitettyä olemassaolevat ja erityisesti uuden aineksen luontimahdollisuus.)

        Helpointa olisi se, että yhdellä sivulla käsiteltäisiin vain aineksia, jolloin pitsanluontivaiheessa voitaisiin olettaa että kaikki ainekset jo taulusta löytyvät. Kun uusi pitsa sitten luodaan, on mahdollista vain valita olemassaolevista aineksista eikä luoda enää uusia.

        Helpoimmasta tavasta en sitten tiedä, minä kun olen aina tehnyt kaikki tällaiset asiat vaikeimman kautta. ;)

        K3: tässäkin voit luoda dynaamisesti delete-lauseen PHP:lla, jolla saat poistettua kaikki ylimääräiset ainekset yhdellä lauseella; esim. delete from sisalto where id_pizza=1 and id_aines in (2,4);

        Pelkän sql:n ja näiden taulujen avulla (ilman PHP:lla tehtyä dynaamista delete-lausetta) et saa poistettua ylimääräisiä aineksia, koska jostainhan sen sql:n avulla pitää hakea ne _mitkä_ ainekset ovat ylimääräisiä.

        Mahdollista olisi esim. sekin, että tekisit uuden pitsan uudella id:llä, annat sille saman nimen kuin aiemmin, lisäät siihen ainekset ja poistat vanhan pitsan sisältöineen (jos et tätä halua säilyttää esim. historian vuoksi, jolloin se pitää merkitä jotenkin vanhentuneeksi tjmv.).


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

    Luetuimmat keskustelut

    1. Suomi meni ihan itse sössimään peruskoulunsa

      Nyt syytellään maahanmuuttoa, vaikka ihan itse lopetettiin vaatimaan oppilailta koulunkäynnin tarkoitus eli opiskelu ja
      Maailman menoa
      297
      1213
    2. Miksi vanhusraiskaajaa ei ole palautettu?

      Ukkola kysyy Rantaselta, vaikka perussuomalaiset ovat olleet hallituksessa kolme ja puolivuotta. Rantasen vastaus on "
      Maailman menoa
      306
      1133
    3. Tuli paha mieli miten kaikki meni meillä

      Harmittaa myönnän sen, kun molemmilla oli selvästi toiveita ennen kuin sukset meni ristiin. Olen jäässä. 😔
      Ikävä
      50
      948
    4. Mitä kirjainta kaipaat?

      🤣🤣🤣🤣🤣
      Ikävä
      87
      904
    5. Mitä sä teet

      Juuri nyt?
      Ikävä
      106
      899
    6. Onko ikäerolla väliä?

      Mitä mieltä ootte? Meillä on 14 vuotta ikäeroa.
      Ikävä
      101
      869
    7. Uusioperhe vai salasuhde?

      Mitä ensisijaisesti haluat? Pelkään, että menetän järjen sun kanssa 😉
      Ikävä
      109
      725
    8. Miten vaikuttaa

      Jos kaivatustasi on moni muukin kiinnostunut?
      Ikävä
      64
      578
    9. Anni Ihamäki ja Ilkka-rakas vetivät tiukan rajan TTK:ssa: "Kyllä spekuloitiin"

      Anni Ihamäki on naimissa Ilkka Ihamäen kanssa. Aviopuoliso tunnetaan myös nimellä Hovimuusikko Ilkka. Heillä on kaksi yh
      Suomalaiset julkkikset
      3
      577
    10. Katri Helena rikkoi hiljaisuuden dramaattisella uutisella: "Elossa ja ilossa ollaan"

      Katri Helena on sinivalkoinen ääni. Hänen klassikkohittinsä ovat tärkeä osa suomalaista kansanperintöä. Katri veti jääh
      Suomalaiset julkkikset
      13
      574
    Aihe