Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vyhledávání v MySQL

Aktivity
Avatar
pgarsky
Člen
Avatar
pgarsky:17.2.2017 20:43

Ahojte, neznáte někdo nějaký funkční příkaz na vyhledávání v MySQL ? Chci to tak, že když uživatel zadá do vyhledávače buď část textu, nebo nadpisu, vypíše mu to výsledky, pokud nenajde nic, vypíše že nic nebylo nalezeno.
Zde je zdroják, je v něm i MySQL příkaz na vyhledávání, ale nijak mu nerozumím.:

public function hledejClanky() {
    $hledani = $_GET['search'];
    $query = "SELECT * FROM clanky WHERE MATCH (nazev, text) AGAINST ('$hledani' IN NATURAL LANGUAGE MODE)";
    $resu = mysqli_query($this->con, $query);
    $radku = 5;
    if ($radku < 1)
    {
        echo('<h2>Nebylo nic nalezeno.</h2>');
    }
    else
    {
        while ($vys = mysqli_fetch_assoc($resu))
        {
            echo('<h2>' . $vys['nazev'] . '</h2>');
        }
    }
}

Mimochodem vždycky to vypisuje chybu:
Warning: mysqli_fetch_as­soc() expects parameter 1 to be mysqli_result, boolean given in ... on line ....
Děkuji a přeji hezký den! :)

Odpovědět
17.2.2017 20:43
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:17.2.2017 21:45

Tady ten nesmysl

$radku = 5;

nahrad

$radku = $resu?mysqli_affected_rows( $this->con ):0;

neboli kod vubec netestuje, jak probehla query ani nikde nezjistuje, kolik ma vysledek radku - proste to nastavi na 5 a dal nic

Editováno 17.2.2017 21:47
 
Nahoru Odpovědět
17.2.2017 21:45
Avatar
pgarsky
Člen
Avatar
Odpovídá na Jiří Fencl
pgarsky:17.2.2017 23:29

Jej, pardon, na to jsem zapomněl. (To jsem si jentak zkoušel, co to udělá.) Ale i když to nahradím (já teda předtím použil mysqli_num_rows), tak to není funkční.

Nahoru Odpovědět
17.2.2017 23:29
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:18.2.2017 14:25

z vyrazu "neni funkcni" fakt nikdo nic nevycte - ledaze by jsi vedel, kde koupit vesteckou kouli

 
Nahoru Odpovědět
18.2.2017 14:25
Avatar
pgarsky
Člen
Avatar
Odpovídá na Jiří Fencl
pgarsky:18.2.2017 15:08

Furt to píše tohle: Warning: mysqli_fetch_as­soc() expects parameter 1 to be mysqli_result, boolean given in ... on line ....

Nahoru Odpovědět
18.2.2017 15:08
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:18.2.2017 16:09

Pak jste furt nenahradil 5 tim vyrazem, jinak by to tam nedoslo

 
Nahoru Odpovědět
18.2.2017 16:09
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:18.2.2017 16:32

pak jeste zmen tu podminku na

if($radku){
...vypis...
}else{
...chyba...
}
 
Nahoru Odpovědět
18.2.2017 16:32
Avatar
pgarsky
Člen
Avatar
Odpovídá na Jiří Fencl
pgarsky:19.2.2017 14:46
public function hledejClanky() {
    $hledani = $_GET['search'];
    $query = "SELECT * FROM clanky WHERE MATCH (nazev, text) AGAINST ('$hledani' IN NATURAL LANGUAGE MODE)";
    $resu = mysqli_query($this->con, $query);
    $radku = $resu ? mysqli_affected_rows($this->con) : 0;
    if ($radku)
    {
        while ($vys = mysqli_fetch_assoc($resu))
        {
            echo('<h2>' . $vys['nazev'] . '</h2>');
        }
    }
    else
    {
        echo('<h2>Nebylo nic nalezeno.</h2>');
    }
}

Píše to stále "Nebylo nic nalezeno."

Editováno 19.2.2017 14:47
Nahoru Odpovědět
19.2.2017 14:46
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Honzs Sedlomn:20.2.2017 9:13

Hoj, omlouvam se, PHP moc nerozumim, ale nestaci na klasicke vyhledavani tohle?

SELECT * FROM clanky WHERE nazev LIKE '%s%' OR nadpis LIKE '%s%'
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
20.2.2017 9:13
Avatar
pgarsky
Člen
Avatar
Odpovídá na Honzs Sedlomn
pgarsky:20.2.2017 12:16

Ahoj, bere tento příkaz třeba i jenom část nějakého řetězce ? Buď název, nebo text, ale aby návštěvník nemusel zadávat celý název, nebo text.

Nahoru Odpovědět
20.2.2017 12:16
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:20.2.2017 12:23

Ja ti dam radu do zivota ... zahod to a zjisti si neco o DIBI :D

 
Nahoru Odpovědět
20.2.2017 12:23
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Bezdíček
David Hartinger:20.2.2017 13:01

To je tedy dost špatná rada, dibi již vůbec není aktuální projekt, zaprvé ji nahradilo Nette database a zadruhé její původní účel byl suplovat za něco, co PHP již teď umí v základu s PDO.

Nahoru Odpovědět
20.2.2017 13:01
You are the greatest project you will ever work on.
Avatar
Jan Bezdíček
Tvůrce
Avatar
Odpovídá na David Hartinger
Jan Bezdíček:20.2.2017 13:06

Neni to aktualni projekt, protoze tam proste uz neni co pridavat ... kdyz nedelam nad Nette, pouzivam jedine dibi. Dost to zprijemnuje praci, coz oproti tomu co vidis nahore musis uznat, ze je pravda.

Osobne DIBI ani neberu tak, ze melo za neco suplovat ... spis to beru jako takovej "handy wrapper", diky kteremu se nejake mensi aplikace proste vyviji snaz.

Obecne sem tou radou myslel, at pouzije nejaky wrapper (at uz treba ten zdejsi nebo si udela vlastni)

 
Nahoru Odpovědět
20.2.2017 13:06
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Bezdíček
David Hartinger:20.2.2017 13:11

"To nahoře" je odstrašující příklad někoho, kdo si nechce udělat čas na přečtení pár článků o tom, jak se správně pracuje s databází. Jinak by to napsal přes PDO a vypadalo by to skoro stejně jako s dibi. Z návrhového hlediska prostě nedává smysl používat knihovny třetích stran na věci, které má jazyk v základu.

Nahoru Odpovědět
20.2.2017 13:11
You are the greatest project you will ever work on.
Avatar
pgarsky
Člen
Avatar
Odpovídá na David Hartinger
pgarsky:20.2.2017 14:23

Já jsem ještě v tomto začátečník a u PHP OOP jsem teprv u statiky. Ale děkuji, mrknu se na PDO.

Nahoru Odpovědět
20.2.2017 14:23
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
pgarsky
Člen
Avatar
pgarsky:22.2.2017 21:50

Děkuji všem pomoc. Především Honzs Sedlomn, který se nejvíc přiblížil správnému řešení. Nebylo to zcela správně, nakonec jsem to vyřešil takto:

$query = "SELECT * FROM clanky WHERE nazev LIKE '%{$hledani}%' OR text LIKE '%{$hledani}%'";
Nahoru Odpovědět
22.2.2017 21:50
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Honzs Sedlomn:22.2.2017 21:53

Promin, ze jsem neodpovedel na tvuj dalsi dotaz, ponekud jsem zapomnel, ze jsem ti poradil.. :D :) Ale jsem rad, ze jsem aspon trochu pomohl :)

 
Nahoru Odpovědět
22.2.2017 21:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.