Filtrování dat z mysql – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Filtrování dat z mysql – PHP – Fórum – Programujte.comFiltrování dat z mysql – PHP – Fórum – Programujte.com

 

Pepa Šrámek
~ Anonymní uživatel
1 příspěvek
28. 2. 2015   #1
-
0
-

Dobrý den,

Mám stránku, kde si vypisuji data z mysql tabulky (jako jmeno, prijmeni, ovoce). A já bych chtěl, aby si je uživatel mohl filtrovat, tzn: když si např zadá příjmení a vybere si jabka, tak aby po stisknutí tlačítka "Vyhledat", aby se mu vypsali jen všechny jabka s tím zadaným příjmením.

<form method="GET" action="">
<label>Jméno:</label>
<input type="text" name="jmeno">
<label>Příjmení</label>
<input type="text" name="prijmeni">
<select name="jidlo">
  <option value="Hrusky">Hrušky</option>
  <option value="Jablka">Jablka</option>
</select>
<br />
<input type="submit" value="Vyhledat" name="search">
</form>

Díky předem za odpověď, v php jsem začátečník.

Nahlásit jako SPAM
IP: 46.47.152.–
peter
~ Anonymní uživatel
4016 příspěvků
2. 3. 2015   #2
-
0
-

"Mám stránku, kde si vypisuji data z mysql tabulky"
Php kod stranky jsi nedal, problem neresitelny, problem vyresen. Opravdu nemas zac dekovat, bylo to snadne.

Zkousel jsi ten SELECT upravit? 

<?php
$a = $_GET['jmeno']; // pro <form method="GET"
$b = $_GET['jidlo'];
$query = "SELECT id, jmeno, prijmeni, jidlo"; // tva verze (pokud ne, mas smulu)
$query = "SELECT id, jmeno, prijmeni, jidlo WHERE jmeno='$a' jidlo='$b' ";
echo $query; // muzes sql prikaz zkopirovat do phpmyadmin a zkusit, zda ti funguje
$result = mysql_query($query);?>
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:5dbb:e1...–
1. 4. 2015   #3
-
0
-

Dobrý den,

mám trochu podobný problém. Filtruji data z databáze pomocí selectů 'species' a 'county'. Když zadám dotaz jen na 'species' nebo 'county', vše je v pořádku. Ale když vyberu 'species' např.psi a 'county' např.Zlínský vyjedou mi jak správná data o psech vyskytujících se ve Zlíně, tak i např. o kočkách vyskytujících se ve Zlíně což je pro mne nežádoucí. Potřebuji, aby ti psi byli prioritou a když se ve Zlíně nevyskytují žádní psi, vyjede mi prázdý výsledek. Nevím jak to přesněji popsat :-). Díky Vám moc za rady. Jsem z toho zoufalý

Nahlásit jako SPAM
IP: 94.112.155.–
1. 4. 2015   #4
-
0
-

   

<select name="species">
<option selected>Typ inzerátu</option>
<option>Psi</option>
<option>Kočky</option>
</select>
<select name="county">
<option selected>Vyberte kraj</option>
<option>Moravskoslezský</option>
<option>Zlínský</option>
</select>

<?php
$query = "SELECT a.* FROM priklad a  WHERE a.species ='$species' OR a.county='$county'";
Nahlásit jako SPAM
IP: 94.112.155.–
lukas.balaz0
Super člen
1. 4. 2015   #5
-
0
-

#4 Rodgers23
netestoval som, ale asi by tam malo byť AND nie OR

Nahlásit jako SPAM
IP: 80.242.41.–
ondrej39+1
Věrný člen
2. 4. 2015   #6
-
0
-

#3 Rodgers23
Jak píše lukas, bude to tím ORem namísto ANDu.

Pro upřesnění, logické operátory fungují následovně:

OR: Pokud platí alespoň jedna z podmínek nebo více podmínek dohromady, pak se příkaz provede. V tvém případě vybíráš psy ze Zlína, jedna podmínka je pes, druhá je Zlín. Když se v databázi najde pes, už jedna podmínka platí a vypíšou se ti proto všechny řádky, které obsahují psa.

Opačně, když se v tabulce nachází řádek, obsahující položku Zlín, tak je jedna podmínka také splněná a vypíšou se ti všechna zvířata nacházející se ve Zlíně.

A do třetice, pokud budou splněny obě podmínky, tj. zvíře bude pes a ze Zlína, podmínka bude splněná rovněž a dojde k vypsání řádku taktéž.

AND: Pokud platí obě podmínky zároveň, teprve tehdy dojde ke splnění podmínky a může dojít k vypsání konkrétního řádku. Na stejném příkladě, hledáš psy a hledáš Zlín, pokud se najde řádek, který obsahuje psa, splní se jedna podmínka, ale pokud daný řádek nebude obsahovat Zlín, tak se celá podmínka zneguje (protože aby byl AND platný, je potřeba, aby byly platné všechny podmínky. A vice versa, najde se řádek, kde je sice Zlín, ale není tam pes, tak se také podmínka vyhodnotí jako neplatná, protože nejsou splněny všechny její části.

Naopak pokud se najde řádek, kde je druh pes a město Zlín, tak se obě části splní, podmínka se vyhodnotí jako splněná a řádek se vypíše.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
2. 4. 2015   #7
-
0
-

#6 ondrej39
Díky moc za odpověď, ale AND a OR chápu. Ještě to trochu upřesním. Potřebuji, aby uživatel nemusel zadávat např.Zlín, pole zůstane prázdné. Když vybere psy, ale už ne kraj, vyjedou mu pouze psi ze všech lokalit. Toto mi funguje. Když zadá psy a zároveň Zlín, také to funguje, vyjedou jen psi ze Zlína. Když nezadá konkrétní zvíře, ale zadá kraj, taky je OK. Proto mám operátor OR. Ale...když zadá psy a např. kraj Moravskoslezský (kde žádní psi nejsou, ale jsou tam kočky), vyjedou mi právě ty kočky, což ovšem není to, co uživatel vyhledává a to že hledá psy v Moravskoslezském kraji. V tom případě bych ho chtěl informovat, že výsledky vyhledávání neodpovídají žádná zvířata.  Pro mě to je trošku oříšek, ale nějak to přece jít musí.

Nahlásit jako SPAM
IP: 94.112.155.–
ondrej39+1
Věrný člen
2. 4. 2015   #8
-
0
-

#7 Rodgers23
Samozřejmě, že to jde. Potřebuješ další podmínky a SQL dotazy. Můžeš třeba udělat, že když bude zadáno zvíře, nebo kraj, ale ne obojí, tak se provede query s OR a jinak (je zadáno zvíře i kraj) se provede query s AND.

Nahlásit jako SPAM
IP: 46.135.10.–
Inject all the dependencies!
peter
~ Anonymní uživatel
4016 příspěvků
3. 4. 2015   #9
-
0
-

Zkus sem dat strukturu tabulek, vypsat podminky, vypsat, jake k nim pouzivas dotazy. Takhle jenom opakujes, ze ti nejaka kombinace nejede. To ti lze rici jen, ze mas spatne sql dotaz. idealne pro kazdou kombinaci mit samostatny sql dotaz. treba mas spatne navrzene i tabulky.

tabulka kraju - id_kraj, nazev
tabulka mest - id_mesto, id_kraj, nazev - propojuje mesta s krajem, pouzijes pro ukladani do tab. zbozi_kraj_mesto
tabulka zbozi - id_zbozi, nazev
tabulka zbozi_kraj_mesto - id_zbozi, id_kraj, id_mesto - propojuje zbozi s mestem a krajem
tabulka zbozi_kategorie - id_zbozi, id_kategorie
tabluka kategorie - id_kategorie, nazev

Chces vypsat vsechno v kraji olomoucky (5), co je pes (7)?

SELECT
  a.id_zbozi,
  a.id_kraj,
  b.id_kategorie
FROM
  zbozi_kraj_mesto a
    LEFT JOIN zbozi_kategorie b ON b.id_zbozi = a.id_zbozi
WHERE
  a.id_kraj=5 AND
  b.id_kategorie=7
GROUP BY
  a.id_zbozi

Pokud tam chces popisky, tak si najoinujes i tabulky s nazvy.
Grupovani tam je, pac to vysype more zbozi se stejnym id. (s tim grupovanim tam mam mozna chybku, vim, ze se tam kdesi do select, where tusim musi vypsat vsechny sloupce a mozna to plati pro jiny typ pouziti group)

Chces vic kraju, mest nebo kategorii?
 

WHERE
  (a.id_kraj=5 OR a.id_kraj=2) AND
  b.id_kategorie=7

WHERE
  a.id_kraj IN (5,2) AND
  b.id_kategorie=7

WHERE
  (a.id_mesto IN (1,6) OR a.id_kraj=11) AND -- ve meste 1 a 6 nebo kraji 11
  b.id_kategorie IN (7,8) -- pes nebo kocka

WHERE
  (a.id_mesto IN (1,6) OR a.id_kraj=11) AND -- ve meste 1 a 6 nebo kraji 11
  b.id_kategorie=7 AND b.id_kategorie=8 -- pes a kocka (tusim to lze napsat podobne jako IN, ale ted si nezvpomenu na prikaz)

 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:199b:4b...–
peter
~ Anonymní uživatel
4016 příspěvků
3. 4. 2015   #10
-
0
-

Nebo, s temi mesty a kraji to muzes udelat jedne tabulce

tabulka mest
id_mesto, id_kraj, nazev
1, 0 , moravsko slezsky kraj - cili kraj bude jakoze mesto v neexistujicim kraji 0
2, 1 , ostrava - a mesto pak bude mit id_kraj stejne jako je id_mesto pro moravsko slezsky kraj

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:199b:4b...–
3. 4. 2015   #11
-
0
-

Díky všem za odpovědi. Nakonec jsem to vyřešil přidáním podmínek a sql dotazů...funguje to  

Nahlásit jako SPAM
IP: 94.112.155.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 58 hostů

Podobná vlákna

C# - Filtrování dat — založil Malag

Zapis dat do mysql — založil matouch

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý