|
|
Khác em à, cách đầu thì sẽ select tất cả những người mua 'xoai' rồi mới so sánh. Cách thứ 2 thì chỉ select đúng người đó và xem họ có mua 'xoai' ko thôi, nó có thêm điều kiện Orders.ID=Customers.ID nên sẽ hạn chế được rất nhiều.
|
|
|
CSS ko phụ thuộc vào HTML hay XHTML bạn à, cho nên vấn đề bạn xét nên xem xét ở khía cạnh CSS thôi. Bạn có thể nói rõ hơn là bạn muốn thế nào, để biết đường mà viết. Hơn nữa, code của bạn ko hiển thị gì nên rất khó test, bạn nên cho hiển thị 1 vài thứ gì đó trong thẻ div chẳng hạn. Ngoài ra thì nên test bằng 1 công cụ nào đó để biết rõ kích thước của element trong văn bản. Nếu trên FF bạn có thể dùng plugin Web Developer.
PS: thuộc tính border viết border: 0px là ko đúng chuẩn đâu, phải viết là border: 0px solid #fff; chẳng hạn, hoặc border: none; thì ok.
|
|
|
Genetic wrote:
Bạn thử chia 2 dữ kiện đó ra làm 2 table khác nhau
- Table Customers gồm 2 trường là ID và Name
- Table Orders gồm 2 trường là ID và Product
Bằng cách này bạn đánh số cho ID cho mỗi khách hàng, và nếu khách hàng đó mua loại hàng gì thì ID của họ sẽ lưu trong table Orders.
Khi muốn truy vấn bạn dùng JOIN
SELECT Customers.Name from Customers FULL JOIN Orders ON Customers.ID=Orders.ID WHERE Orders.Product<> 'xoai' ;
Mình có tìm ra 1 cách tối ưu so với phương án 2 mình đưa ra ở đầu dựa trên việc tách bảng như thế này:
Code:
SELECT DISTINCT Customers.name FROM Customers LEFT JOIN Orders ON Customers.ID=Orders.ID WHERE NOT (SELECT COUNT(Orders.ID) FROM Orders WHERE Orders.ID=Customers.ID AND Orders.product!='xoai')
|
|
|
Tùy vào sở thích và kinh nghiệm của bạn mà chọn, vì các phần mềm diệt virus đều tự quảng cáo mình là tốt nhất. Và thực tế thì mỗi cái đều có 1 thế mạnh trong 1 phạm vi và hoàn cảnh cụ thể, vì vậy chọn 1 cái tốt nhất mà ko rõ tiêu chí gì thì gần như vô vọng.
Bản thân mình dùng Avast! Home (Free) cho Windows và thấy khá tốt. Điểm mạnh của nó mà mình thích là chế độ quét trước khi vào Win khi mới cài đặt. Các antivirus khác mình cũng dùng thử và thấy cái nào cũng ok. Bạn có kết nối internet 24/24 thì hãy update thường xuyên, và nâng cao 1 chút kiến thức của mình về virus thì sẽ khỏi lo virus nữa.
|
|
|
Mình nghĩ là ổ E chính là File System của Ubuntu, tức là /. Tuy nhiên mình ko hiểu rõ lắm về cách bạn cài đặt Ubuntu trên ổ E này, theo như bạn nói sau khi vào lại Vista vẫn đọc được ổ E, tức là nó ko bị format và vẫn ở định dạng NTFS, vậy thì cách bạn cài đặt thế nào nhỉ?
|
|
|
Em gặp 1 lỗi khi trả lời ở /hvaonline/posts/list/0/26955.html. Bài viết thứ 2 của em là trả lời cho bài của Genetic nhưng lại bị hiển thị trước. Các anh xem có phải bị sao ko.
|
|
|
Cám ơn bạn đã trả lời, nhưng cách làm của bạn vẫn ko được bạn à, nó vẫn dính vào trường hợp 1 mà mình nói ở bài đầu, tức là nếu A mua 'xoai' và những thứ khác thì câu lệnh đó chỉ loại 1 record A mua 'xoai' và giữ lại các record khác, cho nên A vẫn được chọn.
|
|
|
Bạn hãy cố gắng phát biểu vấn đề 1 cách rõ ràng, mình tin là sau khi bạn phát biểu vấn đề rõ ràng thì bạn cũng sẽ thấy câu trả lời tự có trong câu hỏi của bạn.
Đối với site nhạc, bạn hãy phân biệt cơ sở dữ liệu nhạc (các file mp3) và cơ sở dữ liệu website (các cấu hình, thiết lập cho website). Phân biệt được thì bạn search thử, sẽ có câu trả lời cho câu hỏi 1 của bạn.
Câu hỏi 2 thì bạn hãy search về bigdump, tìm hiểu xem nó dùng để làm gì.
Thêm nữa, nếu bạn muốn hiểu 1 cách kĩ càng thì nên học 1 chút để có kiến thức cơ bản. Có vẻ như bạn chưa biết gì nhưng muốn làm 1 site nhạc thì phải.
|
|
|
Chào mọi người,
Mình có 1 vấn đề thế này với MySQL: giả sử có 1 table order trong đó có các trường name, product tương ứng là tên người mua và sản phẩm mua, VD 1 vài giá trị như sau:
Code:
name product
1 A chuoi
2 B hoa
3 C banh
4 A tao
5 A xoai
6 B man
7 C xoai
8 B chuoi
Mình muốn lấy ra tên những người ko mua 'xoai' chẳng hạn (trong trường hợp trên là B). Mình thử làm với câu lệnh thế này:
Code:
SELECT name FROM order WHERE product!='xoai' GROUP BY name;
nhưng như thế A và C vẫn được lấy do A và C mua thứ khác, nghĩa là ngoài dòng 5 và 7 thì các dòng còn lại đều hợp lệ.
Mình có thử 1 cách khác như sau:
Code:
SELECT name FROM order WHERE name NOT IN (SELECT name FROM order WHERE product='xoai') GROUP BY name;
Cách này hoạt động đúng nhưng cách này load khá nặng khi số lượng record lớn. Mình muốn tìm 1 phương án tối ưu hơn, rất mong mọi người giúp đỡ. Xin cảm ơn rất nhiều.
|
|
|
Giá trị bạn lưu trong CSDL là INT thì ko convert trực tiếp nó sang dạng xxxx.xxx.xxx được. Bạn thử làm gián tiếp theo 2 hướng này xem thế nào:
1: thay đổi lại cấu trúc của table, đổi column đó thành varchar chẳng hạn, sau đó dùng 1 script để đọc giá trị, chèn dấu chấm vào vị trí thích hợp rồi update lại table.
2: vì vấn đề bạn đưa chỉ là hiển thị, cho nên mình nghĩ ko nên động đến CSDL làm gì, cứ để nó vậy mà bạn chỉ cần dùng các hàm trong ngôn ngữ lập trình "chuyển" nó sang dạng có dấu chấm như mong muốn.
|
|
|
Nén cách này chỉ được cái vỏ rỗng, bạn muốn học để làm gì chứ.
|
|
|
Bạn thử cài đặt và chạy chưa? Có hoạt động bình thường ko?
Theo như tớ được biết thì sở dĩ họ nén được với tỉ lệ khủng khiếp thế này là do các file trong đó "có vỏ mà ko có lõi", tức là khi xem dung lượng của nó thì nó ghi VD là 200 MB, nhưng nội dung của nó ko có gì, vì thế khi nén sẽ gần như ko có. Mấy loại file kiểu này tớ thấy khá nhiều, trước còn có bản Vista 300 KB, nhưng giải nén xong (được 4GB) thì cài ko được.
|
|
|
Nên học căn bản, cú pháp và cách sử dụng các hàm, cấu trúc trong PHP. Nếu hiểu rõ về HTML, CSS thì sẽ có lợi cho bạn viết 1 trang web sau này, chứ cũng ko ảnh hưởng lắm tới học PHP. Ngoài ra khi mới học thì ko nên nhắm vào việc sử dụng ứng dụng gì, vì các ứng dụng đó được xây dựng sẵn, mình nếu có code thêm cũng là theo quy tắc của nó, rồi "hack" hay "plug" vào, đại loại giống như muốn ăn nhanh, ko tốt lắm cho việc học căn bản.
|
|
|
Tuy ko hiểu rõ ý định của bạn lắm, nhưng các thao tác thay thế như thế này làm việc mạnh nhất với regular expression. Bạn search Google thử xem.
|
|
|
Ngày trước tớ có đọc 1 câu chuyện, kể về đời thực của mấy người nghiên cứu, trong đó nói về 1 phòng thí nghiệm, ở đó có khá nhiều nhà khoa học làm việc. Có 1 nhà khoa học trình độ cũng bình thường so với những người khác, nhưng làm việc liên tục 12h/ngày đều đặn, cũng còn có 1 ông thứ 2 nữa giỏi hơn, nhưng làm việc theo đùng giờ giấc quy định. Ông trưởng phòng thí nghiệm ở đó tiên đoán người đầu tiên chắc chắn sẽ thành công hơn người thứ 2. Sau vài năm, ông đầu tiên ra được vài phát minh, có cái khá nổi tiếng, còn ông thứ 2 dậm chân tại chỗ.
Hi vọng câu chuyện hữu ích với bạn. Chúc thành công.
|
|
|
Bạn thử với AJAX xem sao.
|
|
|
Bản mới nhất của Ubuntu là 8.10, mới được phát hành cuối tháng 10 mà bạn. Ubuntu phát hành định kì 6 tháng 1 bản, vào các tháng 4 và tháng 10 hàng năm, kí hiệu phiên bản của nó đều có dạng xxx.04, xxx.10. Hiện giờ chưa có phiên bản nào mang tên 9.05 (hay 9,04) như bạn mô tả cả, vì thế có lẽ bạn nên xem lại nguồn gốc của bản đó. Nếu ko chắc chắn, có thể vào trang chủ của Ubuntu để tải bản mới nhất về.
|
|
|
60487 wrote:
Mình có một câu hỏi ngớ ngẩn nhưng cũng nhờ các bạn góp ý cho:
Mình đang làm web với PHP, mình thắc mắc là khi chúng ta dùng lệnh Include thì web server sẽ làm gì?
- Nó sẻ tìm đến file được include và chèn file này (code) vào ngay dòng mà ta include hay
nó sẽ thực hiện nội dung của file được include rồi trả về kết quả ngay tại dòng mà ta include.
- Một vấn đề nữa là nếu trong file ta include vào có chứa các hàm thì, đường dẫn dùng trong các hàm này chúng
ta phải dùng theo trang nào? tức là đường dẫn này phải tính từ trang chứa hàm(trang được include) hay là trang đang chạy (trang sử dụng lệnh include).
- em định post ở mục Thắc mắc thông thường nhưng sợ mấy anh xóa bài nên cứ post liều vào đây. Hì ...
2 chỗ màu đỏ bạn thắc mắc là đúng đó. Điểm thứ nhất thì có thể hiểu là việc include tương đương với việc bạn chèn trực tiếp nội dung của file được include vào file hiện thời. Điểm thứ 2 thì đơn giản hơn, bạn chỉ cần test 1 cái là rõ ngay.
|
|
|
Có vẻ như cậu ấy dùng Ubuntu.
Bạn thử khởi động apachè bằng 1 trong 2 câu lệnh sau xem thế nào:
Code:
sudo apache2ctl start
hoặc
sudo /etc/init.d/apache2 start
Trong Ubuntu thì hình như ko có lệnh httpd đâu.
Còn muốn cho .htaccess hoạt động thì bạn cần phải sửa file cấu hình apache của website default (localhost) đặt tại /etc/apache2/sites-available/default thành thế này:
Code:
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None <<<<<<<<<======= Sửa chỗ này thành AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
Bạn tham khảo thêm bài viết http://hontap.info/2008/11/cai-dat-apache-php-mysql-tren-ubuntu.html và http://hontap.info/2008/11/bat-modrewrite-trong-ubuntu.html này xem có ích gì ko.
|
|
|
Có lẽ là do phần kiểm tra nhấn $_POST['login'] bạn để ngoài vòng lặp if else bên trên (mình ko hiểu sao bạn kiểm tra $_POST['logout'] ở trong vòng lặp còn login thì vứt ở ngoài). Hơn thế nữa, lệnh wwwect cuối cùng của bạn khiến mình khó hiểu, vì bản thân file đang chạy là a.php rồi, cần gì phải wwwect lần nữa (có khi nào vì chính wwwect này mà thông tin bị gửi lặp lại ko?)
Mình viết tạm code dưới đây, bạn xem có được ko:
Code:
session_start();
if (isset($_SESSION['username'])) { // user đã login
$logged=true;
if (isset($_POST['logout'])) { // user có nhấn logout ko
session_destroy();
unset($_POST['logout']);
unset($_POST['login']);
$logged=false;
}
} else { // user chưa login
$logged=false;
if (isset($_POST['login'])) { // user có nhấn login
// query database để lấy thông tin về user, trả về biến $error = true nếu có lỗi, false nếu thành công.
if ($error) {
header("Location: login_error.php"); // chuyển tới trang báo lỗi
} else {
$logged = true; // chỉ đơn thuần gán là user đã login thành công thôi
}
}
}
// Đoạn code tiếp theo của file a.php hoặc b.php, không wwwect làm gì cả.
|
|
|
Bạn có thể mô tả chi tiết cách bạn thao tác trên 2 tab được ko? Mình mô phỏng theo như dưới đây có đúng ko?
- Bạn mở 2 tab, 1 tab chạy a.php, 1 tab chạy b.php. Cả 2 ban đầu chưa login.
- Bạn login ở file a. Sau khi login thì ở tab này bạn vẫn chạy file a.php phải ko? Hay sau khi login ở file a thì wwwect đến chỗ khác?
- Sau đó bạn refresh lại tab b và thấy ở đó đã xác nhận là login.
- Bạn logout ở tab b.
- Quay lại tab a và nhấn refresh => gặp resend và vấn đề ở trên.
Có 2 dấu hỏi trong đoạn mình mô tả, bạn trả lời kĩ nhé. Và xem mình mô tả có đúng ko nữa. Thêm nữa là đoạn code php ở trên mình muốn hỏi là bạn đặt ở đâu, trong 1 file riêng lẻ rồi include vào 2 file a, b hay là chèn trực tiếp vào đầu từng file? Mình hỏi vậy vì thấy có wwwect ở cuối, hơi lạ.
PS: Bạn nên cho code vào thẻ CODE để giữ được format, đọc dễ hơn.
|
|
|
Mình nghĩ là do bạn quay lại từ trang b về trang a bằng nút Back, cho nên thông tin đó vẫn được FF lưu trong cache, khi refresh các thông tin login sẽ được gửi lại. Bạn hãy cho người dùng quay trở lại trang a từ trang b bằng 1 link thì sẽ tốt hơn và sẽ hoạt động đúng.
|
|
|
Đó là khi bạn nhấn refresh thì Firefox sẽ resend lại toàn bộ thông tin trước đó đã gửi đến trang hiện thời. Và vì trước đó bạn tiến hành đăng nhập tại trang a.php nên thông tin đăng nhập của bạn cũng được gửi lại. Chỉ có cách là người dùng phải thao tác thì mới ko gửi thông tin đó đi thôi:
- xoá cache của ff
- nhấn no khi hỏi có resend hay không
Vấn đề của bạn là vì thông tin khi gửi đến trang a.php là thông tin đăng nhập cho nên mới có chuyện đó. Nếu thông tin là 1 cái khác, vd như thông tin về tìm kiếm sản phẩm chẳng hạn, bạn sẽ thấy nó hoạt động đúng như mong muốn. Cho nên bạn phải tìm cách khác để kiểm soát sự liên hệ login/out ở 2 trang a.php, b.php thôi.
|
|
|
Cảm ơn các bác đã thảo luận .
Em có 1 thắc mắc nhỏ từ câu hỏi của quanta mà chưa ai trả lời, đó là "có công cụ nào để kiểm chứng?". Mỗi phương pháp biên dịch PHP đều có ưu điểm và nhược điểm theo như BachDuongTM, nbthanh và Mr.Bi phân tích. Vậy có cách nào để có thể "quan sát" được mức độ ảnh hưởng của từng yếu tố đến 2 vấn đề là hiệu suất và bảo mật của webserver ko?
|
|