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: SQL dotaz pro vyhledání slova z db tabulky

Aktivity
Avatar
Lucyk
Člen
Avatar
Lucyk:27.6.2015 18:04

Ahoj,

prosím, poradí mi někdo, jak vytvořit následující dotazy pro vyhledávání v tabulce?

Mám tabulku obsahující sloupce a její obsah:
rok, distributor, f_nazev
2000, A, Jan Maly
2000, A, Erik Dup
3000, B, Jan Dlouhy
3000, B, Elis Nova
3000, B, Petr Dlouhy
3000, B, Jan Mak

Snažím se vytvořit následující funkci: Po zadání názvu uživatelem, např. Jan, aby to vypsalo řádky, kde se toto slovo nachází a zároveň je distributor B.

Zkoušela jsem tento kód:

"SELECT id, f_nazev AS nazev FROM tablice WHERE f_nazev '%$searchquery%' ...";

a k tomuto příkazu jsem se pokušela dát (spojit) různé kombinace výrazu AND, ale vždy mi to vypsalo 0 výsledků.

Něco jsem četla o poddotazech a nebo vnořených dotazech, ale vždy se to vztahovalo pro případ, že byly 2 tabulky.

A druhý dotaz, když uživatel zadá celý název z níže uvedené tabulky, tak mi to napíše 0 výsledků, ale když zadá např. Jan, tak vyjedou všechny řádky obsahující tento název. Je to snad tím, že buňka obsahuje dvě slova?
rok, distributor, f_nazev
2000, A, Jan Maly
2000, A, Erik Dup
3000, B, Jan Dlouhy
3000, B, Elis Nova
3000, B, Petr Dlouhy
3000, B, Jan Mak

Dotaz:

SELECT id, f_nazev AS nazev FROM tablice WHERE f_nazev LIKE '%$searchquery%'";

Děkuji za případné vysvětlení a opravu.

 
Odpovědět
27.6.2015 18:04
Avatar
Odpovídá na Lucyk
Martin Konečný (pavelco1998):27.6.2015 18:57

Ahoj,

teoreticky by to mělo jít tímto způsobem

SELECT id, f_nazev AS nazev FROM tablice WHERE f_nazev LIKE '%$searchQuery%' AND distributor = 'B'

S tím druhým případem nevim, proč to nefunguje. Pokud nikdo neporadí přede mnou, tak až skončí fotbal, podívám se na to :D

Editováno 27.6.2015 18:58
Nahoru Odpovědět
27.6.2015 18:57
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Lucyk
Michal Štěpánek:27.6.2015 21:23

Taková všetečná otázka, sloupec "id" tam máš?

Nahoru Odpovědět
27.6.2015 21:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Lucyk
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Lucyk:28.6.2015 3:24

Ahoj, tento zápis jsem zkoušela, ale hlásilo mi to 0 výsledků, přestože v tabulce tato možnost se vyskystuje.

Michal Štěpánek: "id" to tahá automaticky číslo řádku, na kterém se nazev vyskytuje. Ale i tak jsem zkusila "id" z výpisu odstranit, aby to vypisovalo jen proměnnou nazev a bez uspechu.

Ze by byl problem s cyklem pro vypis?

//      include_once("connect_to_mysql.php");
        $query = mysql_query($sqlCommand) or die(mysql_error());
        $count = mysql_num_rows($query);
        if($count > 1){
                $search_output .= "<hr />$count results for <strong>$searchquery</strong><hr />$sqlCommand<hr />";
                while($row = mysql_fetch_array($query)){
                        $id = $row["id"];
                        $name = $row["nazev"];
                        $search_output .= "Item ID: $id - $nazev<br />";
                } // close while
        } else {
                $search_output = "<hr />0 results for <strong>$searchquery</strong><hr />$sqlCommand";
        }
 
Nahoru Odpovědět
28.6.2015 3:24
Avatar

Člen
Avatar
Odpovídá na Lucyk
:28.6.2015 9:15

id to netahá automaticky číslo řádků, id musí být sloupec typu integer s vlastností AUTO_INCREMENT. :)

 
Nahoru Odpovědět
28.6.2015 9:15
Avatar
Lucyk
Člen
Avatar
Odpovídá na
Lucyk:28.6.2015 12:09

Tabulku mám vytvořenou na základě příkazu, kde mám i to id zapsáno

$sqlCommand="CREATE TABLE tablice (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        rok CHAR(10),
        distributor CHAR(10),
        f_nazev CHAR(10),
        FULLTEXT (typ,distributor,f_nazev)
        ) ENGINE=MyISAM";

Tabulka je úspěšné vytvořena a i naplněna hodnotami.

 
Nahoru Odpovědět
28.6.2015 12:09
Avatar
Odpovídá na Lucyk
Michal Štěpánek:29.6.2015 7:25

Nemá být místo tohoto

$name = $row["nazev"];

toto

$name = $row["f_nazev"];

?

Nahoru Odpovědět
29.6.2015 7:25
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Michal Šmahel:29.6.2015 9:30

Ne, má tam

... f_nazev AS nazev ...
Nahoru Odpovědět
29.6.2015 9:30
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Štěpánek:29.6.2015 9:34

V om případě zkus ještě poupravit ten dotaz
místo

WHERE f_nazev like..

zkus dát

... WHERE nazev like...
Nahoru Odpovědět
29.6.2015 9:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Šmahel
Michal Štěpánek:29.6.2015 9:35

a to nemělo být jako odpověď tobě, sorry... :D

Nahoru Odpovědět
29.6.2015 9:35
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Lucyk
Michal Šmahel:29.6.2015 9:43

Zkus přejmenovat f_name za fname.
První situace

$sql = "
    SELECT id, fname AS name
    FROM tablice
    WHERE fname LIKE('%$string%') AND distributor = $string2
";

Druhá situace

$sql = "
    SELECT id, fname AS name
    FROM tablica
    WHERE fname LIKE('%$string%')
";

Začni pomalu s PDO nebo mysqli, takhle je to nebezpečné.

Editováno 29.6.2015 9:45
Nahoru Odpovědět
29.6.2015 9:43
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Štěpánek
Michal Šmahel:29.6.2015 9:44

V pohodě, on má v tabulce f_name, ale tím AS přejmenuje výstupní proměnnou.

Nahoru Odpovědět
29.6.2015 9:44
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
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 12 zpráv z 12.