Tôi có hai bảng, một là Information và một bảng khác là work_force
Thông tin
work_force
Khi addInformation() được gọi, tôi muốn dữ liệu chèn vào thông tin và id là tự động tăng sẽ chèn vào lực lượng lao động bảng, cột twf.Information, and the id which is auto-increment will insert into table workForce, column twf.
Đây là những gì tôi đã thử
addInformation.php
<?php if($_SERVER['REQUEST_METHOD']=='POST'){ //Getting values $name = $_POST['name']; $weather = $_POST['weather']; $date = $_POST['date']; $status = $_POST['status']; $timeIn = $_POST['timeIn']; $timeOut = $_POST['timeOut']; //Creating an sql query $sql = "INSERT INTO information(name, weather, date, status, time_in, time_out) VALUES ('$name','$weather','$date', '$status', '$timeIn', '$timeOut')"; $sql="INSERT INTO work_force (twf) VALUES (LAST_INSERT_ID(), )" //Importing our db connection script require_once('dbConnect.php'); //Executing query to database if(mysqli_query($con,$sql)){ echo 'Information Added Successfully'; }else{ echo 'Could Not Add Information'; } //Closing the database mysqli_close($con); } ?>Nhưng tôi bị mắc kẹt trong chèn id vào twf.
addInformation(name, weather, date2, status, first1[1], last1[1]); addWorkForce(Sub, NoP, NoH, a); public void addInformation(final String name, final String weather, final String date2, final String status, final String timeIn, final String timeOut) { class AddInfo extends AsyncTask<String, Void, String> { ProgressDialog loading; @Override protected void onPreExecute() { super.onPreExecute(); loading = ProgressDialog.show(WorkDetailsTable.this, "Please Wait", null, true, true); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); loading.dismiss(); Toast.makeText(getApplicationContext(), "AAAA"+s, Toast.LENGTH_LONG).show(); //addWorkForce(Sub, NoP, NoH, Long.parseLong(s)); // addWorkDetails(results, Long.parseLong(s)); } @Override protected String doInBackground(String... params) { HashMap<String, String> data = new HashMap<String, String>(); data.put(Config.KEY_USER_NAME, name); data.put(Config.KEY_WEATHER, weather); data.put(Config.KEY_DATE, date2); data.put(Config.KEY_STATUS, status); data.put(Config.KEY_TIMEIN, timeIn); data.put(Config.KEY_TIMEOUT, timeOut); RequestHandler rh = new RequestHandler(); String result = rh.sendPostRequest(Config.ADD_INFORMATION, data); return result; } } AddInfo ru = new AddInfo(); ru.execute(name, weather, date2, status, timeIn, timeOut); }addWorkForce.php
<?php if($_SERVER['REQUEST_METHOD']=='POST'){ //Getting values $subcontractors = $_POST['subcontractors']; $noPeople = $_POST['noPeople']; $noHours = $_POST['noHours']; $twf = $_POST['twf']; //Creating an sql query $sql = "INSERT INTO work_force(subcontractors, number_of_person, number_of_hours, twf) VALUES ('$subcontractors','$noPeople','$noHours','$twf')"; //Importing our db connection script require_once('dbConnect.php'); //Executing query to database if(mysqli_query($con,$sql)){ echo 'Work Force Added Successfully'; }else{ echo 'Could Not Add Work Force'; } //Closing the database mysqli_close($con); } ?>Bạn đã có các giá trị mà bạn có ID trong một bảng. Chèn ID trong một lần!
Tìm kiếm một số ID (hình ảnh của Lucas Pezeta trên Pexels)Bạn làm gì khi bảng của chúng tôi mong đợi ID, nhưng tất cả những gì chúng tôi có là chuỗi? Hãy để tưởng tượng chúng tôi là một nhà hàng. Chúng tôi lưu trữ mọi mục menu và các thành phần của nó vào cơ sở dữ liệu của chúng tôi để chúng tôi có thể theo dõi tất cả các loại thống kê; Tần suất một món ăn được đặt hàng và thành phần nào phổ biến nhất, ví dụ:
Chúng tôi muốn lưu trữ một công thức mới vào bảng công thức nấu ăn nhưng có một vấn đề: Bảng này mong đợi một thành phần_id và không phải là thành phần_name mà chúng tôi hiện đang có. Làm thế nào chúng ta có thể chèn các ID này vào bảng công thức nấu ăn trong khi chúng ta chỉ có tên?
Bài viết này tập trung vào việc lưu trữ các công thức và thành phần đó theo cách thông minh nhất có thể bằng cách sử dụng một bảng thành phần độc đáo. Sau khi đọc bài viết này, bạn sẽ:
- Hiểu bảng duy nhất
- hiểu cách sử dụng một bảng thông qua
- chỉ có thể chèn các giá trị duy nhất vào bảng duy nhất
- có thể chèn vào một bảng trong khi lấy id từ trên bảng duy nhất
Đầu tiên, chúng tôi sẽ thiết lập một số bảng và sau đó chúng tôi sẽ vào truy vấn.
Thành lập
Trong phần này, chúng tôi sẽ xác định cấu trúc cơ sở dữ liệu của chúng tôi và tạo tất cả các bảng của chúng tôi. Sau đó, chúng tôi sẽ chèn một số dữ liệu thử nghiệm trong đó. Sau đó, chúng tôi sẽ nhận được cách chèn với ID đã tham gia. Lưu ý rằng bài viết này sử dụng postgres nhưng các kỹ thuật tương tự áp dụng cho tất cả các cơ sở dữ liệu quan hệ
Cấu trúc cơ sở dữ liệu
Chúng tôi sẽ xác định 3 bảng: một bảng chứa các thành phần, một bảng chứa công thức nấu ăn và bảng thứ ba kết nối hai người với nhau:
Cấu trúc cơ sở dữ liệu của nhà hàng của chúng tôi (hình ảnh của tác giả)Bảng thành phần
Đầu tiên, chúng tôi sẽ tạo bảng thành phần và chèn một số dữ liệu. Kiểm tra bài viết này cho một truy vấn chỉ có thể chèn các thành phần chưa có trong bảng, đảm bảo chúng tôi không bao giờ gặp lỗi. Đối với ví dụ này, chúng tôi sẽ sử dụng phần chèn bình thường của người Viking bên dưới:this articlefor a query that can only insert ingredients that are not already present in the table, making sure we never get errors. For this example we’ll use the “normal” insert below:
Vì vậy, bảng của chúng tôi trông như thế này:
Thành phần mới được chèn của chúng tôiBảng công thức nấu ăn
Bảng này sẽ lưu trữ các công thức nấu ăn có ID duy nhất và tên:
Bảng công thức nấu ăn của chúng tôiBảng công thức
Bảng này kết nối một hoặc nhiều công thức nấu ăn với một hoặc nhiều thành phần. Loại bảng này được gọi là ‘thông qua bảng,; Nó phục vụ như một trung gian giữa hai bảng có mối quan hệ nhiều đến nhiều. Một công thức có thể có nhiều thành phần và một thành phần có thể là một phần của nhiều công thức nấu ăn.
Chúng tôi sẽ kết nối chúng cùng với crecipe_id và thành phần_id:
T
Tất cả các bảng của chúng tôi hiện đã được tạo, hãy bắt đầu chèn!
Bàn của chúng tôi được chuẩn bị, hãy để bắt đầu nấu ăn! (Hình ảnh của Maarten van den Heuvel trên pexels)Chèn vào bảng công thức của chúng tôi
Hãy để có được vấn đề trong tầm tay. Chúng tôi muốn tạo một số bản ghi kết nối một bản ghi trong bảng công thức với một số bản ghi trong bảng thành phần. Chúng tôi cần Recipe_id và một số thành phần_id, cho việc này. Vấn đề là chúng tôi không có thành phần_id, chỉ có tên thành phần. Làm thế nào chúng ta có thể chèn vào bảng điều tra_ingredents? Bây giờ chúng tôi giả sử chúng tôi biết Crecipe_id; Giá trị 1. Truy vấn bên dưới giải quyết vấn đề này:
Hãy để một cái nhìn và đi qua các truy vấn.
- Dòng 1 đến 8; Ở đây chúng tôi xác định bộ dữ liệu mà chúng tôi muốn chèn. Chúng tôi biết tên của thành phần và số lượng.
- Trên dòng 9, chúng tôi nói rằng chúng tôi muốn chèn crecipe_id, itredient_id và số lượng vào bảng crecipe_ingredents. Đây là mục tiêu của chúng tôi
- Trong dữ liệu chọn từ các giá trị đầu vào của chúng tôi (dòng 1 đến 8) mà chúng tôi xác định là d. Chúng tôi tham gia bộ dữ liệu này trên bảng thành phần, phù hợp với tên thành phần.
- Đây là nơi mà phép thuật xảy ra: Như bạn có thể thấy, chúng tôi chọn giá trị 1 cho crecipe_id, id từ bảng thành phần đã tham gia và số lượng từ dataSet đầu vào.
Tính đến Recipe_id
Bí quyết là xác định dữ liệu đầu vào của chúng tôi là một tập dữ liệu, hãy tham gia vào đó với các bảng bắt buộc và sau đó chỉ chèn ID. Khá dễ dàng phải không? Hãy cùng thử điều này với một ví dụ khó khăn hơn, trong đó chúng tôi không chỉ tham gia thành phần_id mà còn là Recipe_id.
Chúng tôi thực hiện thủ thuật từ truy vấn trước đó hai lần: chúng tôi tham gia công thức từ đầu vào trên cột công thức trong bảng công thức nấu ăn. Sau đó, chúng tôi trích xuất ID công thức từ bảng đó và chèn nó vào Recipe_ingRedents. Kiểm tra kết quả dưới đây:
Chúng tôi đã chèn thành phần_id, tương ứng với công thức chính xác_id. Hoàn hảo!