Hakisi tietokannasta elintarvikeiden id:t(esim. 1,52,184,238,23) ja yhdistäisi sen myös määrän(esim. 100,200,325,275,150) ja ajan(esim. 9:00, 12:00, 15:00, 18:00, 21:00) kanssa.
$equery = mysql_query("SELECT * FROM t WHERE u='$u' AND x='$x'"); $resultset=array(); while ($data = mysql_fetch_array($asdquery)) { $resultset[] = $data['e']; $comma_separated = implode(",", $resultset); echo $comma_separated;
Mod. korjasi kooditagit ja otsikon!
Ilmeisesti määrät ja ajat ovat eri tauluissa, tai ne tarvitsee laskea jotenkin. Helpottaisi aika paljon, mikäli kertoisit, miten tiedot kannassa ovat.
Älä käytä mysql-funktioita vaan PDO:ta Putkan oppaan mukaisesti.
Noinhan ne ovat siellä tietokannassa. :D
Tiedän, mutta onko se tietoturvariski? En välitä standardeista, jos niistä ei ole haittaa. :D
- t
-- u
-- x
-- e
-- a
-- t
Minkä ihmeen takia et nimeä tietokannan tauluja ja sarakkeita järkevästi? Kristallipalloni ei osaa sanoa, mitä sarakkeeet u, x, e, a ja t ovat.
Mysql-funktioiden käyttäminen ei sinäänsä ole tietoturvariski, mutta niiden kanssa tietoturva on aivan liian helppo sössiä itse. Etenkin sen takia pitäisi käyttää PDO:ta.
Olettaen, että tietokannassa on sarakkeet id, maara ja aika, ja että haluat tulostaa ne pilkulla erotettuna, onnistuu se PDO:lla tällä tavalla:
Jami kirjoitti:
Noinhan ne ovat siellä tietokannassa. :D
Miten "noin"? Kaikki tietokannan data samalla rivillä muodossa id = "1,2,3", määrä = "100,200,300", aika = "9:00, 12:00, 15:00"?
Niin. Voisin tehdä sen moneen tauluun helposti, mutta haluan oppia jotain uutta ja tehdä niin, että kaikki ovat samalla rivillä. Haluan, että tulostaa käyttäjän elintarvikkeen, ajan ja määrän ja aina toisella rivillä toisen elintarvikkeen, ajan ja määrän.
- taulu
-- u(user)
-- x(päivä), itse asiassa tässäkin voisi olla aika, mutta joutuu taas säätämään muiden kyselyiden, jne. kanssa. :D
-- e(elintarvike)
-- a(määrä)
-- t(aika)
Tuossa ainakaan ei ole mitään järkeä. Kaiken datan tallentaminen samalle riville nimenomaan on hirveä purkkaviritys. Jos opettelet jotain uutta, opettele samalla tekemään asiat kunnolla. Lue ensiksi putkan opas tietokannan suunnittelusta.
Eikö Ohjelmointiputka osaa vastata tähän kysymykseen?
En tarvitse suositteluja, vaan haluan tehdä tämän näin, koska ei se haittaa, jos ei ole tietoturvariski.
Opas kirjoitti:
Esimerkiksi jos tietokanta sisältää verkkokaupan asiakkaiden ostoskorien sisällöt, ei ole järkevää tallentaa asiakkaan kaikkia ostoksia yhdelle riville, joka sisältää merkkijonokentän muotoa "lanttu,purjo,selleri". Tällaisen kentän käsittely SQL-kyselyillä olisi vaivalloista. Järkevä ratkaisu on antaa jokaiselle asiakas-tuote-parille oma rivi, jolloin yhdessä kentässä on vain yksi tuote.
En halua luoda toista taulua syödyille elintarvikeille ja verrata sitä toisten taulujen kanssa. Jos kaikki tiedot ovat samassa taulussa, niiden hahmottaminenkin on yksinkertaisempaa, koska vain yksi rivi kerran päivässä per käyttäjä, koska muuten joudun tekemään näin:
1:
id, u, x, jne.
2:
id, u, x, e, a, t
3:
id, u, x, l, a, t
Parempi:
id, u, x, e, l, a, t, a2, t2
Joutuisin hakemaan koodilla:
$yhteys = new PDO("mysql:host=localhost;dbname=tietokanta", "tunnus", "salasana"); $kysely = $yhteys->prepare("SELECT e, a, t FROM 2 WHERE u = '$user' AND x = '$today'"); $kysely->execute(array($u, $x)); while($rivi = $kysely->fetch(PDO::FETCH_NUM)) echo implode(",", $rivi) . "\n";
Mod. lisäsi lainaus- ja kooditagit, lue ohjeet!
Älä tee noin, kun se juuri on erittäin virhealtis varsinkin kyselyiden muodostamiseen (kuten olet jo huomannutkin, kun virityksesi ei toimi). Tee nyt vaan se aputaulu, josta saat yhdellä yksinkertaisella kyselyllä kaikki ostajan tuotteet haluamassasi järjestyksessä.
Lebe80 kirjoitti:
Älä tee noin, kun se juuri on erittäin virhealtis varsinkin kyselyiden muodostamiseen (kuten olet jo huomannutkin, kun virityksesi ei toimi). Tee nyt vaan se aputaulu, josta saat yhdellä yksinkertaisella kyselyllä kaikki ostajan tuotteet haluamassasi järjestyksessä.
Tuo haluamani tapa kuitenkin toimii, mutta se on vaikeampi tehdä.
Helpoin ei ole aina paras, vaan se mikä itsestään tuntuu parhaalta on paras.. :D
No, alistun kuitenkin kuuntelemaan Ohjelmointiputkan tyypillisiä massan mukana kulkevia pikkutarkkoja standardia noudattavia jäseniä ja teen toisen taulun. :D
Jami kirjoitti:
Tuo haluamani tapa kuitenkin toimii, mutta se on vaikeampi tehdä.
No sittenhän sä osaat varmaan jatkaa tästä itse?
Jami kirjoitti:
Helpoin ei ole aina paras, vaan se mikä itsestään tuntuu parhaalta on paras.. :D
Loogisin on paras. Järjestelmäsi tuntuu toimivan ennemminkin vain sattumalta.
Jos nyt ihan välttämättä haluat purkaa jotain pilkutettua sotkua, sekin on helppoa (mutta typerää ja tehotonta).
// Tietokannasta hakemasi data: $a = "1,2,3"; $b = "100,200,300"; $c = "9:00,12:00,15:00"; // Datan muunto järkevään muotoon: $data = array(); foreach (explode(",", $a) as $i => $x) $data[$i]["id"] = $x; foreach (explode(",", $b) as $i => $x) $data[$i]["maara"] = $x; foreach (explode(",", $c) as $i => $x) $data[$i]["aika"] = $x; // Datan tulostus: foreach ($data as $rivi) { printf("%d: %d kpl, klo %s\n", $rivi["id"], $rivi["maara"], $rivi["aika"]); }
Lebe80 kirjoitti:
Jami kirjoitti:
Tuo haluamani tapa kuitenkin toimii, mutta se on vaikeampi tehdä.
No sittenhän sä osaat varmaan jatkaa tästä itse?
Jami kirjoitti:
Helpoin ei ole aina paras, vaan se mikä itsestään tuntuu parhaalta on paras.. :D
Loogisin on paras. Järjestelmäsi tuntuu toimivan ennemminkin vain sattumalta.
Tarkoitin, että tuo haluamani tapa kuitenkin toimisi, mutta se on vaikeampi tehdä. :D
Metabolix kirjoitti:
Jos nyt ihan välttämättä haluat purkaa jotain pilkutettua sotkua, sekin on helppoa (mutta typerää ja tehotonta).
...
Kiitos. Ainoa hyvä vastaus ikinä tähän mennessä Ohjelmointiputkassa. Kokeilen tuota. :D
Vielä kun saataisiin hyvä kysymys, niin kaikki olisi tyytyväisiä!
Lebe80 kirjoitti:
Vielä kun saataisiin hyvä kysymys, niin kaikki olisi tyytyväisiä!
Osaat varmaan lukea. :)
Jami kirjoitti:
Ainoa hyvä vastaus ikinä tähän mennessä Ohjelmointiputkassa.
Itse asiassa yleisesti ottaen todella huono vastaus, mutta varmaankin lähinnä sitä mitä haluat. Itse en jaksa vastailla edes kysymyksiin joissa toivotaan huonoja vastauksia.
Grez kirjoitti:
Jami kirjoitti:
Ainoa hyvä vastaus ikinä tähän mennessä Ohjelmointiputkassa.
Itse asiassa yleisesti ottaen todella huono vastaus, mutta varmaankin lähinnä sitä mitä haluat. Itse en jaksa vastailla edes kysymyksiin joissa toivotaan huonoja vastauksia.
Yleensä huonoja vastauksia ei haluta, vaan se ainoa kunnollinen ja toimiva vastaus, on se paras, opettele suomea. :D
Pitäkää nyt se turpanne vaan kiinni, en jaksa väitellä. :D
Jami kirjoitti:
Pitäkää nyt se turpanne vaan kiinni, en jaksa väitellä. :D
Itseppähän polkusi valitset. Tuu sitten viiden vuoden päästä itkemään tänne putkaan, että kun ette kertoneet mulle niistä standardeista.
dartvaneri kirjoitti:
Jami kirjoitti:
Pitäkää nyt se turpanne vaan kiinni, en jaksa väitellä. :D
Itseppähän polkusi valitset. Tuu sitten viiden vuoden päästä itkemään tänne putkaan, että kun ette kertoneet mulle niistä standardeista.
Ei standardit ole pakollisia, kunhan vain koodaa vakaata ja toimivaa koodia. :)
Jami kirjoitti:
Ei standardit ole pakollisia, kunhan vain koodaa vakaata ja toimivaa koodia. :)
Ei, ne eivät ole pakollisia, sen kyllä suostun allekirjoittamaan, mutta ne kannattavat.
Olen suunnilleen saman ikäinen kanssasi ja ohjelmoinut nelisen vuotta. Olen itseoppinut, kuten varmaan sinäkin, ja osaan mielestäni ohjelmoida hyvin, varsinkin ikäisekseni. Silti minulla on vielä paljon opittavaa. Itseäni harmittaa, kun en ole alusta alkaen opetellut standardeja, mistä johtuu vähänkään suuremman projektin hajoaminen käsiin.
Mielestäni hyvää ohjelmoijaa ei voi yksiselitteisesti määritellä, mutta hyviä kriteerejä voisivat olla ainakin:
Toivottavasti muistin kaiken oleellisen :)
Niin, mikäänhän ei ole pakko, paitsi verot ja kuolema.
En nyt tiedä onko tässä edes varsinaisesti standardeista kysymys vaan ehkä pikemminkin "parhaista käytännöistä".
Olen itsekin joskus reilu 20 vuotta sitten kun olen aloitellut ohjelmoimaan tehnyt vastaavia älyttömiä virityksiä. Sittemmin olen oppinut ohjelmoimaan paremmin ja oppinut miksi ko. älyttömiä virityksiä kannattaa välttää. Toki minulle on aivan sama jos haluat itsekin oppia asiat kantapään kautta vaikka nykyään onkin Internetin kautta helposti saatavilla tietoa - vastaan ketjuun lähinnä ettei kukaan muu aloittelija erehtyisi ottamaan huonosta mallia.
Hennkka: Sepä on mukava kuulla ja juuri näin. :)
Grez: Heh, mutta hyvä, kun tuli edes jonkunlainen yhteisymmärrys. :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.