Autor Zpráva
visionic
Profil *
Ahoj,

mám tu problém s výběrem dat z mysql, mám totiž vzhledem recyklaci všechny filtry uložené v jednom sloupečku, tedy bych chtěl selectnout řádky s určitými hodnotami, které chci vyhledat. Dle dat z mysql viz dole.

Obsah mysql
Produkt
id/jmeno/filtr/cena
1/Lenovo MI32/1-1+2-3/3125
2/PC dřevěné/1-1+2-4/1250
3/Mac Air/1-10+2-3/10000

Filtr
id/jmeno
1/Výrobce
2/Procesor

Pod-filtr
id/filtr-id/jmeno
1/1/Lenovo
2/1/Acer
10/1/Aple
3/2/4-jádro
4/2/2-jádro

Chci tedy filtrovat výrobce Lenovo.

Použiju LIKE '%1-1%'

Problém nastává, že mi to logicky veme i ten mac. To já ale nechci. Řešení by mohlo být připojit + do řetězce LIKE '%1-1+%'.

Ale co když chci dva filtry? Jak to řešit když nastavuji těch filtrů třeba už deset?

Lze použít třeba toto?
$_GET[filtr] = 1-1+2-3;
$_GET[filtr] = $filtr;
$filtr = explode('+', $filtr)
$x=0;

foreach ($filtr as $key => $value)
{
  $x++;

  if ($x==1)
  {
  $vyhledavac .= "LIKE '%".$value."+%' ";
  } else {
  $vyhledavac .= "AND LIKE '%".$value."+%'";
  }
}

$sql = mysql_query("SELECT * blablabla $vyhledavac ORDER BY id DESC");

Bude to fungovat? Odpověď na otázku typu proč si to nevyzkouším, bohužel nejsem doma a nemám k dispozici server na test a zatím jen spekuluju.

Díky.
Keeehi
Profil
visionic:
Řešení by mohlo být připojit + do řetězce LIKE '%1-1+%'.
Ano, až na to, že za posledním filtrem to plus nemáš, takže filtr na poslední pozici to nenajde.

To co navrhuje by použít šlo, ovšem správně je to jinak. Celý soupeček filtr z tabulky produkt vyhodíš a uděláš z něj vazební tabulku se sloupci produkt_id, filtr_id a podfiltr_id
visionic
Profil *
Keeehi:
Tohle mě také napadlo a zdá se to být dobré řešení a dokonce je asi správné, ale narážím zde na problém. Zaškrtnu výrobce - lenovo, procesor - 4 jádra. Dle vazební tabulky načtu dle filtrů obsah. A ejhle ten produkt se mi načetl 2x. Abych vysvětlil situaci.

Vazebná tabulka
id/product_id/filtr_id/podfiltr_id
1/1/1/1
2/1/2/3

tedy get vypada takto: 1-1 a 2-3

Tak proto to načte dva produkty a proto jsem to chtěl řešit ty filtry na jednom řádku. Samozřejmě asi na to existuje řešení, ale bohužel dál už nevím.
Taps
Profil
Muzes pouzit group by product_id
Keeehi
Profil
visionic:
Přesně tak, jak píše Taps. A pro určení, že se to má brát jako AND a ne jako OR pak využiješ
HAVING COUNT(*) = 2
Na konci je počet filtrů, když budou čtyři bude tam 4
visionic
Profil *
Keeehi:
Ono nestačí toto?: (jsem si vedom, ze chybi cyklus while a spojeni s databazi)

SELECT P.jméno AS pjmeno,* from filters F LEFT JOIN product P on F.product_id=P.id WHERE F.filtr_id=$_GET[filtr] AND F.podfiltr_id=$_GET[podfiltr] GROUP BY F.product_id;

echo $row[pjmeno];
Keeehi
Profil
visionic:
Pro jeden filtr možná ano, v prvním dorazu jsi se ale taky ptal na použití více filtrů současně.

Když to má být filter na produkty, měl bys tam mít JOIN místo LEFT JOIN

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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