Trong 1 năm rưỡi cuối cùng, tôi đã cố gắng lưu trữ ID 16 hàng vào một chuỗi và tách mỗi ID bằng dấu phẩy. Mảng tôi nhận được là từ mysql. Lỗi tôi nhận được là
Chức năng Iliate []: Thông qua các đối số không hợp lệ
$str=array[];
$string="";
while[$row = mysql_fetch_row[$result]]
{
$user_id=$row;
$str=$user_id;
foreach[$str as $p=>$v]{
comma[$v];
}
}
function comma[$v]{
$string= implode[",",$v]; echo $string;
}
Shawn Mehan
4.4639 Huy hiệu vàng30 Huy hiệu bạc 50 Huy hiệu Đồng9 gold badges30 silver badges50 bronze badges
Đã hỏi ngày 22 tháng 7 năm 2012 lúc 11:32Jul 22, 2012 at 11:32
5
Hãy thử một cái gì đó như thế này:
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
Thay thế
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
4 bằng tên cột của ID trong bảng của bạn.Vì vậy: Đầu tiên bạn xây dựng mảng, tiếp theo bạn nổ mảng thành một chuỗi.
Đã trả lời ngày 22 tháng 7 năm 2012 lúc 11:40Jul 22, 2012 at 11:40
Huysentruitwhuysentruitwhuysentruitw
26.6K9 Huy hiệu vàng86 Huy hiệu bạc129 Huy hiệu đồng9 gold badges86 silver badges129 bronze badges
0
Có giải pháp của tôi:
SELECT GROUP_CONCAT[UserID] as string FROM Users;
Đối với chức năng này, dấu phân cách là ',' theo mặc định.
Đã trả lời ngày 5 tháng 8 năm 2016 lúc 22:26Aug 5, 2016 at 22:26
$query = 'SELECT id FROM your_table';
$rs = mysql_query[$query];
$row = mysql_fetch_array[$result];
return implode[',', $row];
Kết quả 1,2,3 ...
Đã trả lời ngày 11 tháng 5 năm 2017 lúc 12:17May 11, 2017 at 12:17
DarwindarwinDarwin
522 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges
Chia các giá trị phân tách dấu phẩy và lấy một giá trị ở vị trí nhất định
Đáng ngạc nhiên là MySQL không có chức năng dành riêng cho các hoạt động này trái ngược với Split_Part trong PostgreSQL. May mắn thay, nó có chức năng Subring_index [] mà gần như những gì chúng ta cần.
Từ tài liệu chính thức:
5$ids = array[]; while [$row = mysql_fetch_assoc[$result]] { $ids[] = $row["UserID"]; } echo implode[", ", $ids];
Trả về chuỗi con từ String Str trước khi tính toán của DELIM DELIMITER. Nếu số lượng là tích cực, mọi thứ ở bên trái của dấu phân cách cuối cùng [đếm từ bên trái] được trả về. Nếu số lượng là âm, mọi thứ ở bên phải của dấu phân cách cuối cùng [đếm từ bên phải] được trả về.
6 thực hiện một trận đấu nhạy cảm trường hợp khi tìm kiếm Delim.$ids = array[]; while [$row = mysql_fetch_assoc[$result]] { $ids[] = $row["UserID"]; } echo implode[", ", $ids];
mysql> SELECT SUBSTRING_INDEX['www.mysql.com', '.', 2]; -> 'www.mysql' mysql> SELECT SUBSTRING_INDEX['www.mysql.com', '.', -2]; -> 'mysql.com'Chức năng này là multibyte an toàn.
Định nghĩa
CREATE TABLE employees [
id SERIAL,
name VARCHAR[255],
address TEXT,
PRIMARY KEY [id]
];
INSERT INTO employees [id, name, address] VALUES
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
Dung dịch
Giả sử chúng tôi muốn tìm tất cả nhân viên làm việc ở một trạng thái nhất định [ví dụ:
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
7] là trường thứ tư trong một địa chỉ giữ cột dưới dạng các giá trị được phân tách bằng dấu phẩy.Với chức năng
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
8, chúng tôi sẽ có thể trích xuất mọi thứ lên đến cột thứ tư chứa trạng tháiSELECT SUBSTRING_INDEX[address, ',', 4] FROM employees;
+-----------+------------------------------------+
| name | SUBSTRING_INDEX[address, ',', 4] |
+-----------+------------------------------------+
| John Doe | 4225 Collins Street,Apt. A,Erie,PA |
| Bob Smith | 234 Main Street,,Erie,PA |
+-----------+------------------------------------+
Bây giờ chúng ta biết rằng trạng thái sẽ luôn là trường cuối cùng trong giá trị kết quả. Vì hàm
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
6 cho phép sử dụng các giá trị âm để trích xuất các trường đếm từ bên phải, chúng tôi sẽ sử dụng khả năng này để trích xuất trường ngoài cùng có chứa chữ viết tắt trạng thái.SELECT name, SUBSTRING_INDEX[SUBSTRING_INDEX[address, ',', 4], ',', -1] AS state FROM employees;
+-----------+-------+
| name | state |
+-----------+-------+
| John Doe | PA |
| Bob Smith | PA |
+-----------+-------+
Giải pháp cuối cùng để tất cả nhân viên làm việc ở một tiểu bang nhất định được hiển thị dưới đây.
SELECT name FROM employees WHERE SUBSTRING_INDEX[SUBSTRING_INDEX[address, ',', 4], ',', -1]='PA';
+-----------+
| name |
+-----------+
| John Doe |
| Bob Smith |
+-----------+
Hãy cẩn thận
Một điều cần lưu ý về
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
6 là hàm trả về toàn bộ chuỗi nếu trường được yêu cầu không tồn tại.Ví dụ,
SELECT GROUP_CONCAT[UserID] as string FROM Users;
1 trả về địa chỉ đầy đủ.SELECT name, SUBSTRING_INDEX[address, ',', 6] FROM employees;
+-----------+------------------------------------------+
| name | SUBSTRING_INDEX[address, ',', 6] |
+-----------+------------------------------------------+
| John Doe | 4225 Collins Street,Apt. A,Erie,PA,16510 |
| Bob Smith | 234 Main Street,,Erie,PA,16510 |
+-----------+------------------------------------------+
Sau đó, cố gắng trích xuất trường thứ sáu với
SELECT GROUP_CONCAT[UserID] as string FROM Users;
2 sẽ cung cấp cho chúng tôi mã zip [trường thứ năm] sai.$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
0Một cách giải quyết có thể xảy ra với vấn đề này là kiểm tra xem số lượng trường lớn hơn hoặc bằng với chỉ mục được yêu cầu và sau đó mã trên hoặc trả về chuỗi trống, nếu chỉ mục trường không hợp lệ.
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
1Có thể sử dụng
Trong hầu hết các trường hợp, tốt hơn là sử dụng một bảng tra cứu riêng biệt hoặc một cột cho mỗi trường thay vì lưu trữ dữ liệu dưới dạng các giá trị được phân tách bằng dấu phẩy để tra cứu sau này.
Tuy nhiên, có thể có những trường hợp hiếm hoi trong đó thủ thuật trên có thể hữu ích. Ví dụ, gần đây tôi cần trả về danh sách các giá trị từ hàm do người dùng xác định và cách duy nhất để làm điều đó là trả về một chuỗi chứa các giá trị được phân tách bằng dấu phẩy. Cuối cùng tôi đã sử dụng
$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
6 để đặt hàng kết quả theo một trong các trường.Tìm kiếm trong một cột chứa các giá trị được phân tách bằng dấu phẩy
MySQL có chức năng chuyên dụng find_in_set [] trả về chỉ mục trường nếu giá trị được tìm thấy trong một chuỗi chứa các giá trị được phân tách bằng dấu phẩy.
Ví dụ: câu lệnh sau trả về chỉ mục một dựa trên giá trị
SELECT GROUP_CONCAT[UserID] as string FROM Users;
4 trong chuỗi SELECT GROUP_CONCAT[UserID] as string FROM Users;
5.$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
2Nếu giá trị đã cho không được tìm thấy, hàm
SELECT GROUP_CONCAT[UserID] as string FROM Users;
6 trả về SELECT GROUP_CONCAT[UserID] as string FROM Users;
7.$ids = array[];
while [$row = mysql_fetch_assoc[$result]]
{
$ids[] = $row["UserID"];
}
echo implode[", ", $ids];
3