Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL-hakukomentoon apuja?

Sivun loppuun

miikka_ [24.02.2008 23:27:30]

#

Terve.

Sinnikkäästi olen nyt yrittänyt arpoa keinoja, joilla saan allaolevasta taulukosta määrätyillä kriteereillä listattua tulokset, mutta en ole toimivaa ja/tai kätevää tapaa vielä löytänyt.

Eli kyseessä on autojen teknisiä tietoja sisältävä taulukko, ja taulukko on muotoa: |ID-numero|Merkki|Malli|Mallitarkennus|Vuosimalli|.. jne.

Teen tähän pienen esimerkkitaulun, jonka jälkeen selostan mitä haluaisin saada tulostettua ja miten.

+---+------------+--------+------------+
| ID| merkki     | malli  | mallitark. |
+---+------------+--------+------------+
| 1 | Mitsubishi | Galant | GLSi 2.0   |
| 2 | Mitsubishi | Galant | GLi 2.0    |
| 3 | Mitsubishi | Galant | GL 1.6     |
| 4 | Mitsubishi | Galant | V6-24      |
| 3 | Mitsubishi | Lancer | 1.6        |
| 4 | Mitsubishi | Lancer | 1.3        |
| 4 | Mitsubishi | Starion| 2.6        |
| 5 | Audi       |     A4 | 1.8 T      |
| 6 | Audi       |     A4 | 2.0 T      |
| 7 | Audi       |     A6 | 2.4        |
+---+------------+--------+------------+

Oletetaan että taulukon alku on siis tällainen. Käyttäjä avaa Mitsubishin mallilistan. Tässä vaiheessa sivulle pitäisi ilmestyä lista Mitsubishin malleista, jotka tietokannasta löytyy. Eli tässä tapauksessa Galant, Lancer ja Starion. Ongelmana mulla on ollut, että miten saan koodin tulostamaan vain kerran jokaisen mallin, ettei samaa mallia tulostu useampaan kertaan. Lisäksi jokainen noista listatuista malleista pitäisi saada linkiksi, ja linkin kohteena $malli.php.

Mallisivulle mentäessä sitten haettaisiin kaikki rivit, joista vain löytyy malli-sarakkeesta tuo $malli.

En tiedä miten epäselvästi tämä oli kirjoitettu, mutta tuun infoamaan lisää jos kyselystäni ei saanut mitään selvää.

Jos jollakin muuten on vielä intoa neuvoa enemmän, niin mitenköhän saisin vielä laskettua tuon perusteella miten monta mallia kultakin merkiltä tietokannassa on? Em. esimerkissä Mitsun eri malleja siis olisi 3 ja Audin 2.

Kiitos jo nyt!

Antti Laaksonen [24.02.2008 23:42:31]

#

Tällä kyselyllä saat selville kaikki eri Mitsubishi-mallit:

SELECT DISTINCT malli FROM autot WHERE merkki = 'Mitsubishi'
malli
----------------
Galant
Lancer
Starion

Näin taas pystyt laskemaan eri merkkien mallien määrät:

SELECT merkki, COUNT(DISTINCT malli) FROM autot GROUP BY merkki
merkki          COUNT(DISTINCT malli)
---------------------------------------
Audi            2
Mitsubishi      3

PHP:n puolella tietyn merkin mallien listaus näyttää tältä:

$merkki = "Mitsubishi";
$tulos = mysql_query("SELECT DISTINCT malli FROM autot WHERE merkki = '$merkki'");
for ($i = 0; $i < mysql_num_rows($tulos); $i++) {
    $malli = mysql_result($tulos, $i);
    echo "<li><a href=\"malli.php?merkki=$merkki&malli=$malli\">$malli</a>";
}

Jos malli kertoo aina auton merkin, merkkiä ei tietenkään tarvitse lähettää sivulle malli.php.

miikka_ [25.02.2008 21:40:10]

#

Toimii täydellisesti! En tajunnut tuota DISTINCT:iä aikaisemmin, nyt sitten alkoi valkenemaan. Kiitos ja iso kumarrus, pelastit monen päivän harmituksen multa :)

miikka_ [26.02.2008 23:06:34]

#

Vieläpä tuli kysymys mieleen, samaa tietokantaa koskien mutta kysymyksen aihepiiri on ihan eri.

Olisi kätevä, kun tuota mallisivua selatessa ja hiiren linkin päälle vietäessä tulisi samanlainen tooltip-tyylinen esikatselu kuin esim. IRC-galleriassa. Eli joku 200*200px -kokoinen esikatselu, jossa näkyisi pari auton tärkeintä tietoa. Ei tarvisi sivua avata nähdäkseen ko. tiedon.

Tiedän, että tekniikka on toteutettu ilmeisesti xmlhttprequestilla, mutta onko olemassa jotain ihan elävää esimerkkiä, jotta maallikkokin ymmärtää mihin laittaa tietokanta-asetukset (josta tiedot ikkunaan haetaan), mihin ikkunan CSS-asetukset jne? Vai osaako joku kenties tällaisen havainnollistaa?

Vasta_alkaja [26.02.2008 23:16:39]

#

Joskus olen tarvinnut hieman samantapaista ja kokeilin tuolla tapaa.. Siitä ei kun soveltamaan.

Huom!! Testattu vain firefoxilla, joten ie kaipaa varmaan vähän säätöä

<html>
  <head>
  <style type="text/css">
  #Sisalla{
    position: absolute;
    background-color:rgb(204,255,255) !important;
    width: 500;
    height: 250px;
    overflow: hidden;
    font-size: bold;
    z-index: 999;
    border-width:1px 2px 2px 1px;
    border-style:solid;
    border-color:black;
  }
  </style>
  <script type="text/javascript">
  function TuoEsiin(form)
  {
    var ikkuna2 = document.getElementById('Sisalla');

    // Näiden tilalle, sinun tulee etsiä hiiren kursorin sijainti
    /*
      Suosittelen tutustumaan silloin prototypeen, sillä se menee näin
      http://www.prototypejs.org/api/event/pointerX

      pointerX(event)
      Returns the x coordinate of the mouse pointer on the page.

      pointerY(event)
      Returns the y coordinate of the mouse pointer on the page.
    */
    ikkuna2.style.left = + 280 + "px";
    ikkuna2.style.top = + 100 + "px";

    // Tuodaan ikkuna esiin
    ikkuna2.style.display = "block";

  }
  function Sulje(form)
  {
    var ikkuna2 = document.getElementById('Sisalla');

    ikkuna2.style.display = "none";

  }
  </script>
  <title></title>
  </head>
  <body>

  <form name="Esimerkki" method="post">
    <b onmouseover="TuoEsiin(this.form);"
        onmouseout="Sulje(this.form);">
        Tuo hiiri minun päälle </b>
        <div style="display:none;" id="Sisalla">
        <font size="4">
            Minun sisään sitten vain sql kyselyjä sekä tarpeesi mukaiset toiminnot.
            onmouseout jne..
        </font>
        </div>
  </form>
  </body>
</html>

Olga [27.02.2008 07:49:38]

#

Tai sitten tekee ihan CSS:llä. Googletus hakusanoilla "css tooltip" löysi esimerkiksi seuraavanlaisen toteutuksen (en sen kummemmin perehtynyt): http://trentrichardson.com/examples/csstooltips/

Vasta_alkaja [27.02.2008 07:58:48]

#

Ovela.. Eipä oo koskaan käynyt mielessä, että sen voisi tehdä noinkin.

miikka_ [07.03.2008 12:15:01]

#

Nostanpa tätä vähän ylös. Sovelsin tuon Olgan antaman linkin omiin tarpeisiini, mutta (yllätys yllätys) tuli selainten välisiä ristiriitoja. IE:llä, Firefoxilla ja Safarilla toimii ihan niin kuin pitäisikin, mutta Opera heittää vähän ikävän näköisesti nuo tooltipit.

Osaisiko joku neuvoa miten tuon saa pelaamaan Operalla oikein tai sitten jos se ei ole mahdollista, disabloida koko ominaisuus selaimen ollessa Opera?


Sivun alkuun

Vastaus

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

Tietoa sivustosta