Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cu ce va aparati de cainii agresi...

Nu imi platiti coletul cu cardul ...

Mi-au disparut amigdalitele ?

Exista vreun plan de terorizare p...
 Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 

selectare din baza de date

- - - - -
  • Please log in to reply
4 replies to this topic

#1
bunicu9

bunicu9

    Member

  • Grup: Members
  • Posts: 253
  • Înscris: 14.07.2013
Vreau sa implementez pe site-ul meu un sistem de tag-uri.

CREATE TABLE `post` (
`id` smallint(6) NOT NULL,
`name` varchar(100) NOT NULL,
`body` text NOT NULL,
`tags` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



Fiecare post are mai multe taguri: text1, text2, text3

Cum pot selecta postul care contine un anumit text in tags chiar daca sunt mai multe

Eu am incercat asa:
$Statement = $Database->prepare(sprintf("SELECT id FROM %s WHERE tags = '%s' ", Attribute::TABLE, $tags));


Eu ii dau o valoare lui $tags = text1 dar imi gaseste doar postul care are un singur tags cu exact text1.
Cum le pot gasi si pe alea care au text1, text2 ?

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
tags LIKE '%test1%'

Nu-i insa cea mai buna abordare

Apoi faci prepare la statement sa poti oferi cum trebuie parametri, sa scapi de sprintf, nu sa le amesteci.

#3
ciuschi

ciuschi

    Member

  • Grup: Members
  • Posts: 254
  • Înscris: 20.10.2007
ce ai tu nevoie se numeste full text search. cauta cum se implementeaza in tipul de sql pe care il folosesti.

#4
bunicu9

bunicu9

    Member

  • Grup: Members
  • Posts: 253
  • Înscris: 14.07.2013

View Postciuschi, on 09 aprilie 2020 - 20:25, said:

ce ai tu nevoie se numeste full text search. cauta cum se implementeaza in tipul de sql pe care il folosesti.
Am pentru cautare globala si e ok
ALTER TABLE `post` ADD FULLTEXT KEY `search` (`name`, `body`, `tags`);


Dar vreau sa fac ceva separat sa caute doar in tags nu si in name si in body

$Statement = $Database->prepare(sprintf("SELECT id FROM %s WHERE 
   MATCH(tags) AGAINST(? IN BOOLEAN MODE) LIMIT 20", Attribute::TABLE));
General error: 1191 Can't find FULLTEXT index matching the column list

#5
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu e bine să faci fulltext search.

Cel mai bine e sa faci un tabel cu taguri (nume și id unice)

Si încă un tabel de asociere în care folosești doar id-uri: de postari și de taguri.

Structura acestui tabel e (int, int).

Baza de date optimizează foarte bine numerele, mai ales dacă indexezi coloanele respective.

În rest, folosești JOIN.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate