Автор Тема: Такава заяква може ли да се направи?  (Прочетена 1862 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

lubbo

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 36
Здравейте,
ползвам CODEIGNITER и ми трябва да направя една заяква като тази заявка трябва да провери дали едно поле съдържа даден стринг , но не от сорта на strstr защото ако търся да кажем числото 2 а имам 250 то пак ще го намери, но идеята ми е да става в самата заявка значи полето в което трябва да се търси в поле което ще има инфорамация от рода на 2;5;6; и самата заяква трябва да разделя всяко едно число и да го сравнява с предварително зададено от мен?

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re:Такава заяква може ли да се направи?
« Отговор #1 -: 29 Юли 2011, 14:23:21 »
Код: PHP
  1. $search ='2;5;6;'; // <- какво ще търсим
  2.  
  3. $word = explode(';',$search); //разделяме отделните части за търсене в стойностти на масив
  4.  
  5. //създаваме заявката
  6. $string = "SELECT * FROM `table`";
  7. $x = 1;
  8. foreach($word as $v):
  9.     if($x == 1)
  10.         $string .= " WHERE "; //само при първото завъртане имаме WHERE клауза
  11.     else
  12.         $string .= " OR "; //или AND както ти е нужно
  13.     $string .= " `field` LIKE '%$v%' ";
  14.     $x++;
  15. endforeach();
  16.  
  17. $query = $this->db->get($string); //заявката
  18.  
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

lubbo

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 36
Re:Такава заяква може ли да се направи?
« Отговор #2 -: 29 Юли 2011, 14:37:28 »
Дава малка грешка:

ето функцията:
public function prob()
{
$search ='fr,'; // <- какво ще търсим 
 
$word = explode(',',$search); //разделяме отделните части за търсене в стойностти на масив 
 
//създаваме заявката 
$string = "SELECT * FROM `offers`"; 
$x = 1; 
foreach($word as $v): 
   if($x == 1) 
   $string .= " WHERE "; //само при първото завъртане имаме WHERE клауза 
   else 
   $string .= " OR "; //или AND както ти е нужно 
   $string .= " `images` LIKE '%".$v."%' "; 
   $x++; 
endforeach; 
 
$query = $this->db->get($string); //заявката
$data = array();

foreach($query->result() as $row)
{
$data[] = $row;
}

return $data;
}

ето грешката:

Цитат
A Database Error Occurred
Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM `offers` WHERE `images` LIKE '%fr%' OR `images` LIKE '%%')' at line 2

SELECT * FROM (`SELECT` * FROM `offers` WHERE `images` LIKE '%fr%' OR `images` LIKE '%%')

Filename: C:\xampp\htdocs\eurovoucher\system\database\DB_driver.php

Line Number: 330

lubbo

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 36
Re:Такава заяква може ли да се направи?
« Отговор #3 -: 29 Юли 2011, 14:47:32 »
Оправих го не бях видял, че си използвал $this->db->get поправих го на query и тръгна мерси многооо :)

edembg

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 2
  • Публикации: 47
Re: Такава заяква може ли да се направи?
« Отговор #4 -: 02 Август 2011, 07:28:53 »
Може би това ще е полезно също. Погледни тук:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

функция
FIND_IN_SET(str,strlist)

Според мен това е най-добрият начин.
И най-ярките личности си плащат тока