Autor Zpráva
Akali
Profil
Ahoj, snažím se o vytvoření vyhledávače na mém webu.. Tady mám php script

<?php
include '../db.php'; 
 
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'UTF8'");

$objekt_vysledku = mysqli_query($db_spojeni, 
  'SELECT');
  
while ($radek = mysqli_fetch_array($objekt_vysledku))
{

  echo 'vypis dat';
}
 
mysqli_free_result($objekt_vysledku);
 
if ($db_spojeni)
  mysqli_close($db_spojeni);
  ?>


Ale vůbec nevím, jak by měl vypadat SQL dotaz. Potřeboval bych, aby se při zadání textu například (okno) vyhledal tento výraz v DB a pak se při výpisu seřadil podle těchto kritérií. Pokud bude výraz v sloupci "nadpis" tak by se řadil jako první a pokud bude ve sloupci "text" tak aby se řadil pod ně. Doufám, že to vysvětluji dostatečně a také doufám, že tu bude nějaká dušička, která by mi s problémem pomohla.

Tady je struktura db
CREATE TABLE IF NOT EXISTS `texty` (
  `id` int(11) NOT NULL auto_increment,
  `nadpis` varchar(100) collate cp1250_czech_cs default NULL,
  `text` varchar(5000) collate cp1250_czech_cs default NULL,
  `info` varchar(100) collate cp1250_czech_cs default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1250 COLLATE=cp1250_czech_cs AUTO_INCREMENT=3 ;
svadla
Profil
Doporučuji prostudovat.
Akali
Profil
Ani po přečtení toho textu z toho nejsem úplně moudrej..
Akali
Profil
<?php
include 'db.php'; 
 

$search = mysql_real_escape_string($_GET["search"]);
$result = mysql_query("
    SELECT *
    FROM texty
    WHERE MATCH(nadpis, text) AGAINST ('$search' IN BOOLEAN MODE)
    ORDER BY 5 * MATCH(nadpis) AGAINST ('$search') + MATCH(text) AGAINST ('$search') DESC
");


while ($radek = mysql_fetch_array($result))
{
  echo '',$radek['nadpis'],'<br>';
  echo '',$radek['text'],'';

}

if ($db_spojeni)
  mysql_close($db_spojeni);
  ?>



pořád mám chybu na tomto řádku a už nevím ja kji vyřešit :(
while ($radek = mysql_fetch_array($result))
Kajman_
Profil *
pořád mám chybu na tomto řádku a už nevím ja kji vyřešit
Důležité je, vypsat si tu chybu! Viz.
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=37836#chyba

Tipuji, že v order by používáte fulltextové funkce (bez boolean přepínače) vyžadující vytvořený fulltextový index.
Akali
Profil
Tak mi to vypsalo tuhle chybu, ale vůbec nechápu proč.. Údaje k připojení do databáze jsou všechny správné

No database selected
Kajman_
Profil *
A v db.php máte co? (Heslo a tak nemusíte uvádět přesně.)
Akali
Profil
$db_spojeni = mysql_connect
('mysql5-4', '------', '------', '------');


nic víc..
Keeehi
Profil
$link = mysql_connect('mysql5-4', 'mysql_user', 'mysql_password');
mysql_select_db('databáze', $link);
Akali
Profil
Proč takto, jakej je v tom rozdíl a co to řeší za problém??
Keeehi
Profil
Akali:
Protože takto je to správně.
Moje na rozdíl od vašeho vybere databázi.
Řeší to problém nevybrané databáze.

Nevím, co máte místo posledního '------', ale pokud tam máte jméno databáze, tak je to špatně. Podívejte se do dokumentace, co se očekává jako čtvrtý parametr. Název databáze to není. Databázi je ale potřeba vybrat. A dělá se to funkcí mysql_select_db().
Akali
Profil
Fíha, měl jsi pravdu, byla chyba v db.php.. Ikdyž to nechápu, protože jsem to tak dělal pořád a fungovalo to.. No nic, tak jsem se zase poučil..
Ještě bych rád radu, jak ošetřím aby se v DB vyhledávala malá i velká písmena (například zadaný text "okno" nic nenajde, protože v db je to uložené jako "Okno"...

A ještě mě napadlo jedno. Když ve sloupci "text" bude daný výraz, šlo by, aby se vypsal na webu ten výraz a před něj se vypsalo 50znaků a za něj 50znaků celého textu? Takže aby se ten text ořízl okolo daného výrazu? Pokud je to ovšem nějak složité, vykašlal bych se na to..


Jinak, děkuji!

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0