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. Kuhmolainen opettaja tuomittu vainoamisesta

      https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen
      Kuhmo
      24
      1332
    2. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      75
      1269
    3. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      84
      1221
    4. Elämäni biisi -paljastus: Tänä lauantaina 26.9. nämä julkkikset istahtavat sinisille sohville!

      Katsotko Elämäni biisiä? Elämäni biisi on monen suomalaisen suosikki. Vieraslista lauantaina 26.9. tarjoilee vieraita m
      Tv-sarjat
      10
      1004
    5. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      129
      995
    6. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      72
      926
    7. Mihin Asiakirjat ovat voineet kunnasta kadota???

      LUE kuinka verorahoja haaskattiin Yle: Ähtärin pandalaskelmat salattiin ja hukattiin - Satakunnan Kansa https://share.
      Ähtäri
      85
      851
    8. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      51
      696
    9. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      132
      692
    10. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      86
      677
    11. haluatko lopettaa

      ihan lopullisesti
      Ikävä
      146
      594
    12. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      50
      579
    13. Kerro kolme hyvää asiaa

      Kaipaamastasi ihmisestä ja lisää perään onko kaivattusi n vai m 😍
      Ikävä
      28
      578
    14. Miten sinä voit?

      Kysytkö kukaan sitä sinulta? Olen huomannut, että jos kohtaa empaattisen ihmisen ja hän kysyy noin, saattaa padot murtua
      Ikävä
      91
      577
    15. Moottoripyöräonnettomuus

      Mopomiitissä tapahtunut onnettomuus ja uutisointi. Ajoradan ylityksen vaarallisuudesta ei mitään uutisointia. Ei myöskää
      Alajärvi
      54
      563
    16. Suomen 4. seksikkäin mies Miika Nousiaisen tilalle - Pitääkö olla huolissaan palaa tv:seen

      Suosittu keskusteluohjelma tekee paluun. Tällä kertaa panelistina ei jatka enää Miika Nousiainen, vaan hänen tilalleen t
      Suomalaiset julkkikset
      13
      549
    17. Minulla on ikävä Sinua kulta, rakas

      Olisitpa lähelläni, tarvitsen sinua ❤️
      Ikävä
      37
      548
    18. 46
      543
    19. Jos oikeasti haluat mies

      Tiedät mitä on tehtävä. Luotan, että etenet jos haluat. En voi tehdä enää mitään kun ei ole numeroasi.
      Ikävä
      94
      526
    20. voi luoja kun uskaltaisin

      laittaa viestiä sinulle...
      Ikävä
      21
      520
    Aihe