PDA

View Full Version : Xử lý điều kiện Where trong codeigniter



tan.dang
27-01-2010, 16:20
Thông thường trong codeigniter mình dùng như thế này để thêm điều kiện where vào câu truy vấn

$this->db->where("id_artical",$item);
$query=$this->db->get('tbl_artical');

Diễn giải ra câu truy vấn là:

$sql= "SELECT * FROM tbl_artical WHERE id_artical=1"; (vd: $item=1)

Bây giờ mình em muốn xử dụng câu sql
$sql= "SELECT * FROM tbl_artical WHERE id_artical!=1";

thì trong codeigniter viết như thế nào. Bác nào biết thì giúp em với

Thanks các bác trước nha.

tuanit85
27-01-2010, 18:38
Thông thường trong codeigniter mình dùng như thế này để thêm điều kiện where vào câu truy vấn

$this->db->where("id_artical",$item);
$query=$this->db->get('tbl_artical');

Diễn giải ra câu truy vấn là:

$sql= "SELECT * FROM tbl_artical WHERE id_artical=1"; (vd: $item=1)

Bây giờ mình em muốn xử dụng câu sql
$sql= "SELECT * FROM tbl_artical WHERE id_artical!=1";

thì trong codeigniter viết như thế nào. Bác nào biết thì giúp em với

Thanks các bác trước nha.

Những quy tắc trên kia chỉ là thư viện hỗ trợ cho việc viết code php của bạn trở nên nhanh hơn thôi. Còn bạn muốn viết code php hay truy vấn sql một cách cổ điển thì vẫn viết như bình thường.
- $query = "SELECT * FROM tbl_artical WHERE id_artical=1";
- $sql = mysql_query($query);
Nhưng sẽ có nhiều người đặt ra câu hỏi bạn sử dụng codeigniter để làm gì :D

s.code
27-01-2010, 19:01
$this->db->where("id_artical !=",$item);
$query=$this->db->get('tbl_artical');

Hoặc

$this->db->where("id_artical != '$item'");
$query=$this->db->get('tbl_artical');


hoặc

$this->db->where_not_in("id_artical", array($item));
$query=$this->db->get('tbl_artical');

kevin.1709
27-01-2010, 19:42
Thì bạn đã có bằng rồi thì thêm != nữa cũng dễ mà^^

Đây là khởi tạo giá trị mặc định cho nó khác 1 luôn!
$this->db->where("id_artical !=",'1');
$this->db->get("tbl_artical");

Không thì có thể sử dụng giá trị truyền vào
$this->db->where("id_artical !=",$id); //$id truyền vào
$this->db->get("tbl_artical");

Có một cách kết hợp 2 câu where với nhau nữa trong trường hợp nếu bạn muốn lấy id_artical > 5 và id_artical != 8;

$this->db->where("id_artical >",'5');
$this->db->where("id_artical !=",'8');

Tuơng tự như or cũng vậy thôi !^^

$this->db->where("id_artical !=",'5');
$this->db->orwhere("id_artical !=",'8');

Thân :D

pcdinh
03-02-2010, 20:56
Tại sao chỉ viết 1 câu query đơn giản lại cần cả đống code kiểu OOP nửa vời thế nhỉ? Viết query luôn cho đỡ rối mắt không

bka
03-02-2010, 22:12
có những cái đơn giản nhiều khi người ta cố tình làm cho nó phức tạp lên vậy đó.

hoainguyenduc
04-02-2010, 14:04
Sao bạn không dùng như zậy :


$sql= "SELECT * FROM tbl_artical WHERE id_artical !=1"
$this->db->query($sql);


Những câu SQL đơn giản thì bạn làm như vậy.
Khi nào có xử lý phức tạp thì mới dùng tới lớp db của CI.
Thân!

chothapcam.net
08-02-2010, 14:45
Dùng thành phần nào của cái nào (CodeIgniter hay Zend hay gì gì nữa) mà chưa rõ thì bạn cứ mở core của nó cụ thể là các class cơ sở của nó ra xem là biết cách liền :)

kenphan19
08-02-2010, 22:38
Nhiều khi rắc rối nó cũng có lợi của nó. Viết như thế là viết theo cách mà CI đã áp đặt, và chắc hẳn nó có support nhiều db engine ... MS ACCESS, SQL, SQLITE, blah, blah ... :D theo mình nghĩ là thế...

snoob_clo4
08-02-2010, 23:17
Tại sao chỉ viết 1 câu query đơn giản lại cần cả đống code kiểu OOP nửa vời thế nhỉ? Viết query luôn cho đỡ rối mắt không
Có những cái đã trở thành thối quen rùi :rolleyes:

zest
08-02-2010, 23:34
Có những cái đã trở thành thối quen rùi :rolleyes:

:)một thói quen ko được tốt cho lắm

s.code
09-02-2010, 15:38
Tại sao chỉ viết 1 câu query đơn giản lại cần cả đống code kiểu OOP nửa vời thế nhỉ? Viết query luôn cho đỡ rối mắt không

Nghe danh bác đã lâu nhưng hôm nay thật bất ngờ khi bác lại nói thế

Mục đích của CI FW hoặc các framework khác. Ngoài việc wrap code nó còn nhiều ý nghĩa khác.

Việc sử dụng query dạng active record của codeigniter:

+ thứ nhất nó sẽ tự filter và tránh các lỗi injection cho người lập trình
+ Viết dạng OOP dễ nhìn
+ các DBMS có một số đặc thù riêng thì cái bộ đệm này sẽ lo cho. Ví dụ muốn limit trong MySql thì dùng từ khóa limit, nhưng trên SQL server lại không có. Nhưng với bộ $this->db của CI nó đã lo cho hết. Với việc hệ thống lớn khi phải thay đổi hệ quản trị cơ sở dữ liệu thì CI nó lo cho hết. Ví dụ web dùng Mysql muốn chuyển qua dùng SQL server thì hầu như không cần phải viết lại.
............
+ Còn nhiều thứ nữa.

ngoc_viet08
09-02-2010, 16:56
nhân vô thập toàn :)

pcdinh
10-02-2010, 23:04
@s.code



thứ nhất nó sẽ tự filter và tránh các lỗi injection cho người lập trình

Cái này khó lắm à?



Viết dạng OOP dễ nhìn


Có dễ nhìn hơn không các bạn :D



Ví dụ web dùng Mysql muốn chuyển qua dùng SQL server thì hầu như không cần phải viết lại.

Có thật thế không bạn? Bạn đã làm một dự án PHP nào trên SQL Server nào mà chưa gặp vấn đề với nó chưa?

Bạn cho rằng mấy em code PHP tàng tàng ở Expression Engine có thể lo cho bạn các phần như hint hay analytics function hay sao? Hay đơn giản các bạn ấy chỉ wrap mấy cái SQL đơn giản cho bạn mà ở MySQL hay SQL Server cũng chẳng khác nhau là mấy. Rồi khi debug bạn vẫn phải lôi câu query cuối cùng ra để thử ;)

Để thực hiện ao ước viết 1 lần chạy mọi nơi thì bạn cần đề nghị EE thuê 1 SQL guru về viết nên 1 DSL tạm gọi là CIQL giống như HQL và 1 CIQL Manager. Viết code và chạy code trên
cùng 1 ngôn ngữ giao tiếp với DB thì mới ổn

Hi vọng kinh nghiệm dần sẽ cho bạn cái nhìn thực tế hơn

nguyentrandangkh
19-01-2011, 12:24
vào user guide của nó hướng dẫn hết nè
http://codeigniter.com/user_guide/database/active_record.html

kamikaze-2005
19-01-2011, 23:10
@s.code


Cái này khó lắm à?



Có dễ nhìn hơn không các bạn :D



Có thật thế không bạn? Bạn đã làm một dự án PHP nào trên SQL Server nào mà chưa gặp vấn đề với nó chưa?

Bạn cho rằng mấy em code PHP tàng tàng ở Expression Engine có thể lo cho bạn các phần như hint hay analytics function hay sao? Hay đơn giản các bạn ấy chỉ wrap mấy cái SQL đơn giản cho bạn mà ở MySQL hay SQL Server cũng chẳng khác nhau là mấy. Rồi khi debug bạn vẫn phải lôi câu query cuối cùng ra để thử ;)

Để thực hiện ao ước viết 1 lần chạy mọi nơi thì bạn cần đề nghị EE thuê 1 SQL guru về viết nên 1 DSL tạm gọi là CIQL giống như HQL và 1 CIQL Manager. Viết code và chạy code trên
cùng 1 ngôn ngữ giao tiếp với DB thì mới ổn

Hi vọng kinh nghiệm dần sẽ cho bạn cái nhìn thực tế hơn

1. Không khó nhưng đã có qui định rồi sao không áp dụng ?
2. Bạn mặc bộ đồng phục trường ĐHBK vào trường ĐHHS thì dễ nhìn hơn ?
3. Nếu bạn đã hoàn thành được một dự án PHP&SQL nào rồi thì chưa chắc người khác chưa hoàn thành được hoặc hoàn thành không tốt bằng bạn !
4. Khi bạn học ở trường bạn có khi nào đặt câu hỏi rằng "thầy cô có lo được cho bạn từ a->z hay cần bạn phải có tiếp thu và có chọn lựa rồi tìm hiểu rộng thêm dựa trên kiến thức được thầy cô truyền đạt" hay không ?
5. Nếu như bạn không sử dụng bất kỳ cấu trúc qui tắc nào của CI mà muốn tự viết hoặc dùng một cấu trúc qui tắc khác thì bạn đang đi lạc đề tài. Nếu bạn giỏi thì có thể cho mọi người trên thế giới biết rằng "bạn có một sản phẩm tốt hơn CI" và chúng ta sẽ cùng tham khảo và tranh luận về sản phẩm đó ở một topic khác.

ngoc_viet08
20-01-2011, 03:08
@kamikaze-2005 : cậu ko có việc j làm hay sao đi cãi với cái bài từ 2-2010? Gần 1 năm trời ?

p/s: người ta nói gà , cậu hiểu vịt , nến phán ra ngan .:D