Avatar
Lucyk
Člen
Avatar
Lucyk:

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):

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
Avatar
Odpovídá na Lucyk
Michal Štěpánek:

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

Nahoru Odpovědět  +1 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:

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
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Lucyk
Michal Vašíček:

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
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Lucyk
Člen
Avatar
Odpovídá na Michal Vašíček
Lucyk:

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:

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
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 (ceskyDJ)
Michal Štěpánek:

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 (ceskyDJ)
Michal Štěpánek:

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 (ceskyDJ):

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 (ceskyDJ):

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.