2009-09-13 32 views
9
select * from A left join B on A.columnc=B.columnd 

kết quả được trả về bởi trên SQL sẽ bao gồm cả cột của A và B.Cách lấy kết quả từ hàng MySQL có nhiều cột cùng tên với PHP?

Và nếu A và B có một số cột có cùng tên?

Cách lấy giá trị từ PHP?

+0

Bạn sẽ nhận được một lỗi nêu cột mơ hồ - cơ sở dữ liệu không thể nói đó của hai cột với tên giống hệt nhau để sử dụng. –

+4

@rexem: Điều đó không đúng. SQL là hoàn toàn chính xác, lỗi sẽ xảy ra nếu truy vấn đã chọn rõ ràng tên cột tồn tại trong cả hai bảng, nhưng không chỉ rõ tiền tố bảng. – quosoo

Trả lời

18

Bạn có thể muốn rõ ràng hơn trong truy vấn của mình. Bằng cách đó bạn có thể cung cấp các bí danh cho các cột của bạn:

SELECT 
    A.foo as a_foo, 
    B.foo as b_foo 
FROM A 
LEFT JOIN B ON A.columnc = B.columnd 
+0

Nếu bạn chỉ cần một vài cột từ bảng thứ hai của bạn, bạn có thể (trong mysql, anyway) làm một cái gì đó như "SELECT a. *, B.column_that_also_exist_in_a như someAliase ..." – timdev

+0

@tim: Nên có thể làm điều này trong bất kỳ hệ thống cơ sở dữ liệu tuân thủ ANSI nào. –

7

Câu trả lời là actualy trong PHP documentation: ưu tiên

"Nếu hai hoặc nhiều cột của kết quả có tên trường cùng, cột cuối cùng sẽ mất . để truy cập vào cột khác (s) cùng tên, bạn có cần phải truy cập vào kết quả với chỉ số số bằng cách sử dụng mysql_fetch_row() hoặc thêm tên bí danh. Xem ví dụ tại mysql_fetch_array() mô tả về bí danh. "

Đặc biệt mysql_fetch_array() dường là ứng cử viên tốt nhất khi bạn nhấn mạnh vào việc sử dụng ngôi sao trong câu lệnh select:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

Sau đó, bạn có thể tham khảo các lĩnh vực unambigous bởi $row[name] và đến một ambigous bởi $row[col_number], nhưng điều đó hạn chế di động của mã của bạn (có thể phiên bản tiếp theo của MySQL sẽ trả về các cột theo một thứ tự khác?). Giải pháp được đề xuất là viết lại truy vấn của bạn và liệt kê tất cả các trường bắt buộc thay vì sử dụng dấu sao và cho các trường không rõ ràng - sử dụng bí danh.

+0

bạn có thể cung cấp bản trình diễn không? – omg

1

Trong Java + MySQL từ đối tượng ResultSet, bạn có thể sử dụng ví dụ getString ("a.id") và cũng getString ("b.id"), nếu truy vấn của bạn giống như "SELECT a.id, b. id FROM a, b "

Tôi không biết nếu có điều gì đó như thế này trong PHP.

Trân

1

Điều này có thể có ích cho ai đó: Bởi vì tôi đã sử dụng một số khuôn mẫu, tôi có thể không dễ dàng sử dụng bí danh mỗi lần, và tôi muốn các mảng kết hợp để dễ sử dụng. TÍN DỤNG PILCROW cho câu trả lời của mình trên how to mysql_fetch_array on joined tables, but columns have same name, nhưng trong MySQLi:

$qualified_names = array(); 
for ($i = 0; $i < mysqli_num_fields($result); ++$i) { 
    $fieldinfo=mysqli_fetch_field_direct($result,$i); 
    $table = $fieldinfo->table; 
    $field = $fieldinfo->name; 
    $qualified_names["$table.$field"]="$table.$field"; 
} 
$newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM)); 
Các vấn đề liên quan