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

405

    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. Mitä mieltä miehet ovat 40-50v naisista?

      Rehellisesti. Mitä ajattelet kun naiselle tulee ikäää
      Ikävä
      204
      1551
    2. Palstamiittinkiä taas ajattelen

      Niin.. oli tuossa elokuussa Randen kanssa juttua palstamiitistä ensi kesälle. Ajatuksena oli miitti Jyväskylässä, joka
      Sinkut
      181
      800
    3. Niin se mies

      Mikä sen miehen etunimi muuten on ketä kaipailet
      Ikävä
      51
      740
    4. Mitä haluaisit minusta mies

      Meidän tilanne on ns.vaikea, eikä olla koskaan puhuttu tai edes ehditty puhua siitä, että mihin me tällä kaikella säätäm
      Ikävä
      54
      723
    5. Kun olet noin varovainen, niin tehdään näin

      Ollaan luontevia kun tavataan. Ei mitään paineita. Halataan lämpimästi toisiamme, ja sitä hetkeä voi viivyttää, kunnes s
      Ikävä
      36
      704
    6. Työttömille tulossa pakollinen ilmaistyö sanoo kokoomusministeri

      https://www.iltalehti.fi/politiikka/a/078a91b0-4bdf-4a7b-9c3b-f3cf2bdd3dae Kokoomus, persut ja kepu laittavat työttömät
      Maailman menoa
      380
      666
    7. Mikä on ollut

      Paras kuva kaivatustasi?
      Ikävä
      30
      531
    8. Voi, voi herttinen nainen

      Kun olet ollut niin..... Tyly ja kylmä. Eikö
      Ikävä
      18
      525
    9. Martina Aitolehti ja Nanna Karalahti - Rajua röykytystä nyrkkeilymatsista "Ettei naisten botoksi..."

      Martina Aitolehti ja Nanna Karalahti nyrkkeilevät toisiaan vastaan Immu Fight Nightissa. Naiset ovat saaneet osakseen k
      Kotimaiset julkkisjuorut
      49
      524
    10. Selvitetään tämä meidän välinen juttu

      Kertoisin sulle, mitä sinussa näen ja mikä viehättää eniten. Pitkä tarina tulisi siitä, mutta haluisin nähdä, kun kuunte
      Ikävä
      19
      516
    Aihe