Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukanie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Baki
witam

mam problem by prawidlowo uzyc LIKE albo innego rodzaju zapytanie..

mam dwie tabele o takiej strukturze:


PRODUKTY:
id_produktu
nazwa
cena

KOMPLETY
id_kompletu
nazwa
id_produktu|id_produktu|id_produktu

Tabela komplety w drugim polu zawiera id_produktow rozdzielone pipe'em

i teraz powstal maly problem z zapytaniem ktore ma przypisac produkt do kompletu
gdy zrobie zapytanie
  1. SELECT nazwa
  2. FROM komplety
  3. WHERE produkty LIKE '%$id_produktu%' LIMIT 1


to generalnie zapytanie wyszukuje komplety tylko czasami blednie
bo jesli mam produktu o id 10abc oraz 100abc to one mi powoduja bledne wyszukanie idzie jakos zrobic zeby w ciagu rozdzielonym | odszukal dokladnie to o co go prosze? wiem ze mozna by probowac przeszukwac tak

  1. LIKE '% $id_produktu %'
ale nie mam tam spacji wiec nie dziala

lub tak
  1. LIKE '%|$id_produktu|%'
ale
pole te sa rozdzielane id1|id2|id3 i w tym przypadku nie bedzie sprawdzany pierwszy ID

czy jest cos w stylu LIKE ale ktory muszi odnalesc dokladnie taka frazea nie jej czesc? w ciagu znakow?

mam nadzieje ze rozumiecie o co mi chodzi ? biggrin.gif

pozdrawiam
i dzieki za podpowiedzi
mike
Zanim zaczniesz brnąć w bagno popraw konstrukcję bazy danych bo to co masz teraz jest bardzo niedobre.
Ideę kompletów należy rozwiązać w tym przypadku tak:

products
id | name | price

sets
id | name

products_sets (tabela łącząca)
id_set | id_product

I teraz przykład:
1.
  1. INSERT
  2. INTO products
  3. SET id = 1, name = 'rękawiczki', price = 12.30;
  4. INSERT
  5. INTO products
  6. SET id = 2, name = 'szalik', price = 10.20;
  7. INSERT
  8. INTO products
  9. SET id = 3, name = 'buty', price = 5.30;

2.
  1. INSERT
  2. INTO sets
  3. SET id = 1, name = 'zimowy';
  4. INSERT
  5. INTO products
  6. SET id = 2, name = 'szkolny';

3.
  1. INSERT
  2. INTO products_sets
  3. SET id_set = 1, id_product = 1;
  4. INSERT
  5. INTO products_sets
  6. SET id_set = 1, id_product = 2;
  7. INSERT
  8. INTO products_sets
  9. SET id_set = 2, id_product = 3;


I masz zestaw zimowy złożony z przedmiotów 1,2 i zestaw szkolny składający się tylko z butów (przedmiot 3)
Baki
Hi

mike co do konstrukcji masz racje biggrin.gif

ale do tej ilosci kompletow i jej malego stopnia skomplikowalnosci..
zaszlosci kiedy to bylo tworzone itp smile.gif

nie nadaje sie juz do zmiany konstsukcji..

a zapytanie moze wygladac tak:

  1. SELECT id_kompletu
  2. FROM KOMPLETY<span
  3. style='color:green'>WHERE MATCH (produkty) AGAINST ('+$id_produktu' IN BOOLEAN MODE)"



zapytanie bardzo szybkie.. a ulatwia mocno strukture smile.gif
takze a przy ilosci kompletow na poziomie 50 a produktow <2500

dziala bardzo dobrze..

pozdro
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.