Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietojen hakeminen tietokannasta

Sivun loppuun

Jami [30.08.2012 06:48:25]

#

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!

-tossu- [30.08.2012 08:50:13]

#

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.

Jami [30.08.2012 22:28:42]

#

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

-tossu- [30.08.2012 23:35:57]

#

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:

$yhteys = new PDO("mysql:host=localhost;dbname=tietokanta", "tunnus", "salasana");
$kysely = $yhteys->prepare("SELECT id, maara, aika FROM taulu WHERE u = ? AND x = ?");
$kysely->execute(array($u, $x));

while($rivi = $kysely->fetch(PDO::FETCH_NUM))
	echo implode(",", $rivi) . "\n";

Metabolix [30.08.2012 23:40:57]

#

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"?

Jami [31.08.2012 06:32:15]

#

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)

-tossu- [31.08.2012 10:17:07]

#

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.

Jami [31.08.2012 12:52:33]

#

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!

Lebe80 [31.08.2012 14:05:35]

#

Ä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ä.

Jami [31.08.2012 14:30:50]

#

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

Lebe80 [31.08.2012 14:37:39]

#

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.

Metabolix [31.08.2012 15:33:21]

#

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"]);
}

Jami [31.08.2012 16:29:33]

#

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

Lebe80 [31.08.2012 16:32:21]

#

Vielä kun saataisiin hyvä kysymys, niin kaikki olisi tyytyväisiä!

Jami [31.08.2012 16:33:07]

#

Lebe80 kirjoitti:

Vielä kun saataisiin hyvä kysymys, niin kaikki olisi tyytyväisiä!

Osaat varmaan lukea. :)

Grez [31.08.2012 18:20:03]

#

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.

Jami [05.09.2012 16:32:35]

#

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

dartvaneri [05.09.2012 16:49:11]

#

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.

Jami [09.09.2012 21:13:47]

#

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. :)

Hennkka [09.09.2012 22:16:48]

#

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 :)

Grez [09.09.2012 23:58:58]

#

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.

Jami [11.09.2012 22:22:10]

#

Hennkka: Sepä on mukava kuulla ja juuri näin. :)

Grez: Heh, mutta hyvä, kun tuli edes jonkunlainen yhteisymmärrys. :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta