Queryn tulokset talteen?

Miten voi ottaa queryn tulokset talteen ja pyytää niitä vaikka $_POST tai muulla metodilla

Tarkoitukseni olisi tehdä hakusivu jossa sadasta tuloksesta näytettäisiin kerrallaan kymmenen per sivu. Tähän varmaan olisi jokin muukin tapa mutta ajattelin että olisi suht helppoa jos vain jollain ilveellä saisin $result:in talteen
$result=mysql_query($query)

Kiitokset jo etukäteen jos jollain on vinkkejä
12439
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

Juu no käytä sitä copy paste -toimintoa ja sit vedät ne sivut siihen yhteen serveriin, niin että http:t on oikeassa järjestyksessä eikä 09@£€3#-häiriöitä synny.

Äänestä
  • ....

    Äänestä

En kylläkään ymmärtänyt tuota kysymystä kunnolla. Et kai tarkoita, että haluat kaikki kyselyn palauttaman datan talteen ja näyttää siitä vain 10 sivulla?

Toki tuo onnistuu helposti, mutta tuota ei todellakaan pidä tehdä niin.

Vaan näin
SELECT etunimi, sukunimi FROM taulusi WHERE sukunimi = 'jejre' LIMIT 0, 10

Tuo näyttää kymmenen ensinmäistä hakutulosta, LIMITin eka numero sanoo monta hakutulosta jätetään alusta näyttämättä, toinen numero monta näytetään.

Äänestä
  • En tuota LIMIT komentoa tiennytkään, kiitos paljon!

    Äänestä

  • Nimetön kirjoitti:

    En tuota LIMIT komentoa tiennytkään, kiitos paljon!

    Se query jonka tarvisin listaussivulle on tehty temppitaulusta ja temppitaulu tyhjentyy aina kun postaan sivun uudelleen (teen varmaan jotain väärin?!?). Eli tässä varmaan tarvisi tehdä jokin kikka että temppitaulu olisi jaettu tai jotenkin muuten pidettäisiin se tallessa jotta tuota LIMIT-komentoa voisi käyttää.
    Temppitaulua on periaatteessa pakko käyttää koska kerään tietoa useammasta eri taulusta ja sorttaan ne sitten oikeaan järjestykseen listausta varten

    Äänestä

  • Nimetön kirjoitti:

    Se query jonka tarvisin listaussivulle on tehty temppitaulusta ja temppitaulu tyhjentyy aina kun postaan sivun uudelleen (teen varmaan jotain väärin?!?). Eli tässä varmaan tarvisi tehdä jokin kikka että temppitaulu olisi jaettu tai jotenkin muuten pidettäisiin se tallessa jotta tuota LIMIT-komentoa voisi käyttää.
    Temppitaulua on periaatteessa pakko käyttää koska kerään tietoa useammasta eri taulusta ja sorttaan ne sitten oikeaan järjestykseen listausta varten

    "Se query jonka tarvisin listaussivulle on tehty temppitaulusta ja temppitaulu tyhjentyy aina kun postaan sivun uudelleen (teen varmaan jotain väärin?!?)."

    Hmmm... Temptaulu on juurikin väliaikaistaulu joka tuhotaan automaattisesti ainakun MySQL yhteys sulkeutuu. Joten teet siinämielessä ihan oikein.


    "tässä varmaan tarvisi tehdä jokin kikka että temppitaulu olisi jaettu tai jotenkin muuten pidettäisiin se tallessa jotta tuota LIMIT-komentoa voisi käyttää."

    Kyllä voit tehdä temptaulun sijasta ihan norm tauluja olikos HEAP tyypiltään jolloin ne tuhotaan vasta kun palvelin tilttaa tai vastaavaa.


    "Temppitaulua on periaatteessa pakko käyttää koska kerään tietoa useammasta eri taulusta ja sorttaan ne sitten oikeaan järjestykseen listausta varten"

    Tiedäthän joinit(liitokset) jotka on tehty juurikin tuota varten? Siis teet joinit ja sit vain ORDER BY määre.

    Jos tuolla ei onnistu, niin onko data kovin muuttuvaista?
    Jos ei niin voisit tehdä ihan norm taulun jossa olisi tarvittava tieto kevyempi ratkaisu kuin luoda aina joka haun yhteydessä temppitaulu.

    Oliskos mahollista saada taulurakenteet ja kysely niin voisin katsoa onnistuukos se jotenkin muuten kuin temppitauluilla?

    Temppitauluja vain järjestämisen takia ei useinkaan tarvita.

    Äänestä

  • Nteap kirjoitti:

    "Se query jonka tarvisin listaussivulle on tehty temppitaulusta ja temppitaulu tyhjentyy aina kun postaan sivun uudelleen (teen varmaan jotain väärin?!?)."

    Hmmm... Temptaulu on juurikin väliaikaistaulu joka tuhotaan automaattisesti ainakun MySQL yhteys sulkeutuu. Joten teet siinämielessä ihan oikein.


    "tässä varmaan tarvisi tehdä jokin kikka että temppitaulu olisi jaettu tai jotenkin muuten pidettäisiin se tallessa jotta tuota LIMIT-komentoa voisi käyttää."

    Kyllä voit tehdä temptaulun sijasta ihan norm tauluja olikos HEAP tyypiltään jolloin ne tuhotaan vasta kun palvelin tilttaa tai vastaavaa.


    "Temppitaulua on periaatteessa pakko käyttää koska kerään tietoa useammasta eri taulusta ja sorttaan ne sitten oikeaan järjestykseen listausta varten"

    Tiedäthän joinit(liitokset) jotka on tehty juurikin tuota varten? Siis teet joinit ja sit vain ORDER BY määre.

    Jos tuolla ei onnistu, niin onko data kovin muuttuvaista?
    Jos ei niin voisit tehdä ihan norm taulun jossa olisi tarvittava tieto kevyempi ratkaisu kuin luoda aina joka haun yhteydessä temppitaulu.

    Oliskos mahollista saada taulurakenteet ja kysely niin voisin katsoa onnistuukos se jotenkin muuten kuin temppitauluilla?

    Temppitauluja vain järjestämisen takia ei useinkaan tarvita.

    Mun pitää tuota HEAP-tietotyyppiä varmaan tutkia vähäsen jos siitä löytyisi ratkaisu.

    Noita Joineja alunperin hiukan mietiskelin, mutta en usko että niidenkään käyttäminen tässä onnistuu kovinkaan helposti

    Unohdin tuossa kertoa että sorttauksen muuttujat vaihtelevat queryssä..
    Voisin muuten laittaa queryt näytille mutta ne on kolvattu niin suureen kokonaisuuteen että mieluummin kokeilen selittää ne tässä:

    Oon kokeillut väsätä semmoista vuokraussivustoa jossa annetaan ajanjakso ja hakukone etsii ajanjaksolla vapaat kohteet ja kertoo niiden hinnat kyseisellä jaksolla. Hinnat ja kohteiden tiedot viedään temppitauluun joka sortataan hintojen perusteella:

    annetaan hakukriteerit:
    Ominaisuudet, hinta, ajanjakso

    haku lyhykäisyydessään:
    1. Kaivetaan esiin kohteet joiden ominaisuudet ovat halutunlaiset.
    2. nopataan pois ei-vapaana olevat
    3. kaivetaan esiin hinnat erillisestä hinnastosta joka koostuu kahdesta taulusta: hintaluokat per päivämääräväli ja taulu jossa kerrotaan eri hintaluokkia vastaavat euromäärät
    4. viedään tulos temppiin
    5. sortataan ensisijaisesti hinnan perusteella

    Muuten toimii hienosti, mutta tuo sivujen jakaminen tuntuu pirun vaikealta.

    Äänestä

  • temppitaulukyselijä kirjoitti:

    Mun pitää tuota HEAP-tietotyyppiä varmaan tutkia vähäsen jos siitä löytyisi ratkaisu.

    Noita Joineja alunperin hiukan mietiskelin, mutta en usko että niidenkään käyttäminen tässä onnistuu kovinkaan helposti

    Unohdin tuossa kertoa että sorttauksen muuttujat vaihtelevat queryssä..
    Voisin muuten laittaa queryt näytille mutta ne on kolvattu niin suureen kokonaisuuteen että mieluummin kokeilen selittää ne tässä:

    Oon kokeillut väsätä semmoista vuokraussivustoa jossa annetaan ajanjakso ja hakukone etsii ajanjaksolla vapaat kohteet ja kertoo niiden hinnat kyseisellä jaksolla. Hinnat ja kohteiden tiedot viedään temppitauluun joka sortataan hintojen perusteella:

    annetaan hakukriteerit:
    Ominaisuudet, hinta, ajanjakso

    haku lyhykäisyydessään:
    1. Kaivetaan esiin kohteet joiden ominaisuudet ovat halutunlaiset.
    2. nopataan pois ei-vapaana olevat
    3. kaivetaan esiin hinnat erillisestä hinnastosta joka koostuu kahdesta taulusta: hintaluokat per päivämääräväli ja taulu jossa kerrotaan eri hintaluokkia vastaavat euromäärät
    4. viedään tulos temppiin
    5. sortataan ensisijaisesti hinnan perusteella

    Muuten toimii hienosti, mutta tuo sivujen jakaminen tuntuu pirun vaikealta.

    Olipas tässä hetkonen aikaa joten naputtelin jonkinmoisen kyselyn. (Varmaan tää foorumi sotkee, mut toivottavasti tuosta selvää saapi)

    SELECT DISTINCT t.nimi,
       hl.alkaa AS hl_alkaa,
       hl.loppuu AS hl_loppuu,
       hr.euro
       
    FROM tavarat AS t
       LEFT JOIN varaukset AS v ON (t.tavara_id = v.tavara_id
          AND v.loppuu >= '2007-01-01' AND v.alkaa = '2007-01-01' AND hl.alkaa = '2007-01-01' AND hl.alkaa

    Äänestä

  • Nteap kirjoitti:

    Olipas tässä hetkonen aikaa joten naputtelin jonkinmoisen kyselyn. (Varmaan tää foorumi sotkee, mut toivottavasti tuosta selvää saapi)

    SELECT DISTINCT t.nimi,
       hl.alkaa AS hl_alkaa,
       hl.loppuu AS hl_loppuu,
       hr.euro
       
    FROM tavarat AS t
       LEFT JOIN varaukset AS v ON (t.tavara_id = v.tavara_id
          AND v.loppuu >= '2007-01-01' AND v.alkaa = '2007-01-01' AND hl.alkaa = '2007-01-01' AND hl.alkaa

    Vaihtamalla päiväyksen 2007-05-08 -> 2007-06-08 näät että piilottaa varatut.



    --
    -- Rakenne taululle 'hintaluokat'
    --

    CREATE TABLE hintaluokat (
    hintaluokka_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(4) NOT NULL,
    hintaryhma_id tinyint(3) unsigned NOT NULL,
    alkaa date NOT NULL,
    loppuu date NOT NULL,
    PRIMARY KEY (hintaluokka_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

    --
    -- Vedostetaan dataa taulusta 'hintaluokat'
    --

    INSERT INTO hintaluokat (hintaluokka_id, tavara_id, hintaryhma_id, alkaa, loppuu) VALUES
    (1, 2, 1, '2007-01-01', '2007-05-09'),
    (2, 2, 2, '2007-05-10', '2008-01-01'),
    (3, 3, 3, '2007-01-01', '2007-05-09'),
    (4, 4, 1, '2007-01-01', '2007-05-09'),
    (5, 3, 4, '2007-05-10', '2008-01-01'),
    (6, 4, 5, '2007-05-10', '2008-01-01');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'hintaryhmat'
    --

    CREATE TABLE hintaryhmat (
    hintaryhma_id tinyint(4) NOT NULL AUTO_INCREMENT,
    euro int(11) unsigned NOT NULL,
    PRIMARY KEY (hintaryhma_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

    --
    -- Vedostetaan dataa taulusta 'hintaryhmat'
    --

    INSERT INTO hintaryhmat (hintaryhma_id, euro) VALUES
    (1, 100),
    (2, 200),
    (3, 300),
    (4, 400),
    (5, 500);

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'ominaisuudet'
    --

    CREATE TABLE ominaisuudet (
    ominaisuus_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    ominaisuus varchar(100) NOT NULL,
    PRIMARY KEY (ominaisuus_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

    --
    -- Vedostetaan dataa taulusta 'ominaisuudet'
    --

    INSERT INTO ominaisuudet (ominaisuus_id, ominaisuus) VALUES
    (1, 'zoom'),
    (2, '1mm'),
    (3, '2mm');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'ominaisuudet_liitos'
    --

    CREATE TABLE ominaisuudet_liitos (
    id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(3) unsigned NOT NULL,
    ominaisuus_id tinyint(3) unsigned NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

    --
    -- Vedostetaan dataa taulusta 'ominaisuudet_liitos'
    --

    INSERT INTO ominaisuudet_liitos (id, tavara_id, ominaisuus_id) VALUES
    (1, 2, 1),
    (2, 3, 2),
    (3, 3, 3),
    (4, 4, 2);

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'tavarat'
    --

    CREATE TABLE tavarat (
    tavara_id tinyint(4) NOT NULL AUTO_INCREMENT,
    nimi varchar(100) NOT NULL,
    PRIMARY KEY (tavara_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

    --
    -- Vedostetaan dataa taulusta 'tavarat'
    --

    INSERT INTO tavarat (tavara_id, nimi) VALUES
    (4, 'kaapeleita'),
    (2, 'kamera-setti'),
    (3, 'poria');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'varaukset'
    --

    CREATE TABLE varaukset (
    varaus_id tinyint(4) NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(4) NOT NULL,
    alkaa date NOT NULL,
    loppuu date NOT NULL,
    PRIMARY KEY (varaus_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

    --
    -- Vedostetaan dataa taulusta 'varaukset'
    --

    INSERT INTO varaukset (varaus_id, tavara_id, alkaa, loppuu) VALUES
    (1, 3, '2007-05-09', '2007-05-23');

    Äänestä

  • Nteap kirjoitti:

    Olipas tässä hetkonen aikaa joten naputtelin jonkinmoisen kyselyn. (Varmaan tää foorumi sotkee, mut toivottavasti tuosta selvää saapi)

    SELECT DISTINCT t.nimi,
       hl.alkaa AS hl_alkaa,
       hl.loppuu AS hl_loppuu,
       hr.euro
       
    FROM tavarat AS t
       LEFT JOIN varaukset AS v ON (t.tavara_id = v.tavara_id
          AND v.loppuu >= '2007-01-01' AND v.alkaa = '2007-01-01' AND hl.alkaa = '2007-01-01' AND hl.alkaa

    Hupsistas, en muuttanutkaan kaikkia päiviä oikeiksi testailun jälkeen. 2007-11-08 pitäs olla 2007-05-08.

    Äänestä

  • Nteap kirjoitti:

    Vaihtamalla päiväyksen 2007-05-08 -> 2007-06-08 näät että piilottaa varatut.



    --
    -- Rakenne taululle 'hintaluokat'
    --

    CREATE TABLE hintaluokat (
    hintaluokka_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(4) NOT NULL,
    hintaryhma_id tinyint(3) unsigned NOT NULL,
    alkaa date NOT NULL,
    loppuu date NOT NULL,
    PRIMARY KEY (hintaluokka_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

    --
    -- Vedostetaan dataa taulusta 'hintaluokat'
    --

    INSERT INTO hintaluokat (hintaluokka_id, tavara_id, hintaryhma_id, alkaa, loppuu) VALUES
    (1, 2, 1, '2007-01-01', '2007-05-09'),
    (2, 2, 2, '2007-05-10', '2008-01-01'),
    (3, 3, 3, '2007-01-01', '2007-05-09'),
    (4, 4, 1, '2007-01-01', '2007-05-09'),
    (5, 3, 4, '2007-05-10', '2008-01-01'),
    (6, 4, 5, '2007-05-10', '2008-01-01');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'hintaryhmat'
    --

    CREATE TABLE hintaryhmat (
    hintaryhma_id tinyint(4) NOT NULL AUTO_INCREMENT,
    euro int(11) unsigned NOT NULL,
    PRIMARY KEY (hintaryhma_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

    --
    -- Vedostetaan dataa taulusta 'hintaryhmat'
    --

    INSERT INTO hintaryhmat (hintaryhma_id, euro) VALUES
    (1, 100),
    (2, 200),
    (3, 300),
    (4, 400),
    (5, 500);

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'ominaisuudet'
    --

    CREATE TABLE ominaisuudet (
    ominaisuus_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    ominaisuus varchar(100) NOT NULL,
    PRIMARY KEY (ominaisuus_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

    --
    -- Vedostetaan dataa taulusta 'ominaisuudet'
    --

    INSERT INTO ominaisuudet (ominaisuus_id, ominaisuus) VALUES
    (1, 'zoom'),
    (2, '1mm'),
    (3, '2mm');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'ominaisuudet_liitos'
    --

    CREATE TABLE ominaisuudet_liitos (
    id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(3) unsigned NOT NULL,
    ominaisuus_id tinyint(3) unsigned NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

    --
    -- Vedostetaan dataa taulusta 'ominaisuudet_liitos'
    --

    INSERT INTO ominaisuudet_liitos (id, tavara_id, ominaisuus_id) VALUES
    (1, 2, 1),
    (2, 3, 2),
    (3, 3, 3),
    (4, 4, 2);

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'tavarat'
    --

    CREATE TABLE tavarat (
    tavara_id tinyint(4) NOT NULL AUTO_INCREMENT,
    nimi varchar(100) NOT NULL,
    PRIMARY KEY (tavara_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

    --
    -- Vedostetaan dataa taulusta 'tavarat'
    --

    INSERT INTO tavarat (tavara_id, nimi) VALUES
    (4, 'kaapeleita'),
    (2, 'kamera-setti'),
    (3, 'poria');

    -- --------------------------------------------------------

    --
    -- Rakenne taululle 'varaukset'
    --

    CREATE TABLE varaukset (
    varaus_id tinyint(4) NOT NULL AUTO_INCREMENT,
    tavara_id tinyint(4) NOT NULL,
    alkaa date NOT NULL,
    loppuu date NOT NULL,
    PRIMARY KEY (varaus_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

    --
    -- Vedostetaan dataa taulusta 'varaukset'
    --

    INSERT INTO varaukset (varaus_id, tavara_id, alkaa, loppuu) VALUES
    (1, 3, '2007-05-09', '2007-05-23');

    Kiitos taas vaivannäöstä, toihan näyttää yllättävän toimivalta. Kokeilen miten saan kiinnitettyä omaan ohjelmaani tuon lokiikan ja pistän vaikka tänne viestiä miten kävi.

    Tässä ei indexoinnilla ole muutenkaan suurtakaan merkitystä, kokeilen tehdä edes suht nopean queryn, mutta koska recordsien määrä on aika pieni ei huonollakaan taulurakenteella haut montaa sekunnin kymmenystä kestä

    Äänestä

Käytä limittiä. Jos pistät LIMIT 10, 20 niin se näyttä hakutuloksista rivit 10-20 jolloin sivutus on lastenleikkiä.

EIkä niitä hakutuloksia kannata minnekkään tallentaa, oot muuten helposti raceconditionissa kun tietokannassa on eri tiedot kuin sun softassasi kun jokin päivittää takanasi tietokantaa.

Äänestä

Kommentoi aloitusta


Nimetön kirjoitti:

Miten voi ottaa queryn tulokset talteen ja pyytää niitä vaikka $_POST tai muulla metodilla

Tarkoitukseni olisi tehdä hakusivu jossa sadasta tuloksesta näytettäisiin kerrallaan kymmenen per sivu. Tähän varmaan olisi jokin muukin tapa mutta ajattelin että olisi suht helppoa jos vain jollain ilveellä saisin $result:in talteen
$result=mysql_query($query)

Kiitokset jo etukäteen jos jollain on vinkkejä

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu