Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL:stä hakeminen

Sivun loppuun

SysRq868 [03.04.2007 20:58:05]

#

Onhan näitä threadeja jo aikasemminkin, joten oli pakko yksi itsekin omistaa. Eli muotoilin oman väännöksen myslihausta, joka on saatavilla tuolta: http://www.designplace.org/scripts.php?page=1&c_id=25

Tämä koodi hakee vain yhdestä sarakkeesta. Ajattelin, että teoriassa sen voisi vääntää hakemaan mistä tahansa, jos sille opettaisi kaikkien kenttien nimet arrayssa ja ajaisi haun esimerkiksi for-silmukan läpi niin, että kaikista on varmasti haettu. Mutta ongelma tuli eteen: silloinhan, jos kahdessa eri kentässä on samalla rivillä sama merkkijono, tuloksiin tuo rivi tulee kahteen kertaan. Sitä paitsi, kun taulu on vielä luonnosvaiheessa, niin sitä arrayta saisi sitten olla koko ajan säätämässä.

Eli jokin helpompi tapahan tälle varmastikin on. Se kyllä oli eilisessä televisiovisailussa, mutta nyt ei vain ihan tule päähän, että miten se taas olikaan - miten siis helposti ja oikein toteuttaisi haun, joka hakee koko taulusta, mutta listaa yhden rivin vain kerran?

Niko [03.04.2007 23:14:13]

#

merkki LIKE '%Vol%' or malli LIKE '%Vol%'

kayttaja-2791 [03.04.2007 23:37:55]

#

DISTINCT:llä voit vaatia että tulokset ovat uniikkeja, tuohon tapaan:
http://www.webdevelopersnotes.com/tutorials/sql/online_mysql_guide_the_distinct_keyword.php3

SysRq868 [03.04.2007 23:39:38]

#

Niko: Tämä siis tulee mihin..? Minulle pitää olla hyyyyvin selkeä.

JTS: Kätevää. Miten DISTINCT sitten liitetään tähän näin? Itse asiassa, kun tarkemmin ajattelen, seuraava ongelma tulee siinä, miten voin lisätä uuden for-silmukan tuloksen edellisen queryyn, jolloin niitä voi muokkailla ja järjestellä ym. vielä...

Blaze [03.04.2007 23:49:10]

#

SELECT DISTINCT blah ...

SysRq868 [03.04.2007 23:55:44]

#

Saako tämän kaiken siis yhteen mysli-queryyn?

select distinct * from taulu where name like \"%$trimmed%\" order by name

toimii vallan mainiosti. Mysli ei kuitenkaan ymmärrä, kun haluan, että

select distinct * from taulu where name like \"%$trimmed%\" or desc like \"%trimmed%\" order by name

tai että

select distinct * from taulu where name like \"%$trimmed%\" or where desc like \"%trimmed%\" order by name

tai jopa

select distinct * from taulu where name or desc like \"%$trimmed%\" order by name

eikä edes

select distinct * from taulu where * like \"%$trimmed%\" order by name

Miten siis saada niin, että voi hakea juuri tietyistä sarakkeista joita on enemmän kuin yksi mutta vähemmän kuin kaikki? Kiitos.

Blaze [04.04.2007 00:26:23]

#

SysRq868 kirjoitti:

Mysli ei kuitenkaan ymmärrä, kun haluan, että

select distinct * from taulu where name like \"%$trimmed%\" or desc like \"%trimmed%\" order by name

Minulla ymmärtää :) (testikantana Amarokin artistirelaatiokanta):

mysql> select distinct * from related_artists where artist like '%aa%' or suggestion like '%aa%';
+--------------------------------------+-------------------------------------+------------+
| artist                               | suggestion                          | changedate |
+--------------------------------------+-------------------------------------+------------+
| Kotiteollisuus                       | Eppu Normaali                       |          0 |
| Kotiteollisuus                       | Maija Vilkkumaa                     |          0 |
| Elvenking                            | Korpiklaani                         |          0 |
| Moonsorrow                           | Korpiklaani                         |          0 |
...
+--------------------------------------+-------------------------------------+------------+
145 rows in set (0.02 sec)

Niko [04.04.2007 00:47:18]

#

select distinct * from taulu where name like \"%$trimmed%\" or desc like \"%trimmed%\" order by name

desc on mysql avain sana

SysRq868 [04.04.2007 08:15:35]

#

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in \www\search.php on line 39

36   $query = "select distinct * from taulu where name like \"%$trimmed%\" or desc like \"%$trimmed%\" order by name";
37
38   $numresults=mysql_query($query, $link);
39   $numrows=mysql_num_rows($numresults);

En älyä, mikä voi olla vikana - molemmat kentät ovat olemassa (varchareja molemmat), ja haku toimii, jos etsii vain namesta. Mutta jos laitan descin tuonne väliin, se rupeaa herjaamaan. :(

kayttaja-2791 [04.04.2007 10:10:24]

#

Debugia kehiin:

$numresults = mysql_query($query, $link) or die("Kysely $query aiheutti virheen ".mysql_error());

ukko [04.04.2007 10:12:01]

#

^^^ Tuossahan tuo jo sanottiin. "Desc"-sanaa ei saa käyttää, vaihdappa taulun sarakkeen nimeksi esim descr.

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

SysRq868 [04.04.2007 15:37:22]

#

Ah. Kiitoksia. Pitääpä bookmarkata.


Sivun alkuun

Vastaus

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

Tietoa sivustosta