簡體   English   中英

PHP Mysql嘗試從不同的表中提取多行(在2個表上可容納3行,但在3個表中則無法容納4行)

[英]PHP Mysql trying to pull multiple rows from different tables (works for 3 rows on 2 tables but not 4 rows from 3 tables)

我正在嘗試從數據庫的不同表中提取多行。

如果我只有兩個表的前3行,則可以正常工作。 一旦添加第三張表並嘗試拉另一行,它就會中斷!

最終,我想做的是提取圖像, dayid ,一個人的名字,然后一個原因的名字。

imageURLOutfitday_id在同一表中,人員名稱在Pilot表中,原因的名稱在表cause中。

出於某種原因,它將從表Outfitimage拉出前兩行( imageUrloutfitDay_id ),然后從Pilot拉出第三行( name ),但是如果我添加名稱並嘗試從Cause表中將其拉出,它將失敗。

$link = mysql_connect("host","user","pass");
if ($link) {
   mysql_selectdb("up",$link);  
   // Select records from the DB  
   $query  = "SELECT imageUrl,outfitDay_id,name,name FROM OutfitImage,Pilot,Cause ORDER BY Rand(" . date("Ymd") . ") LIMIT 1";
   $image = mysql_query($query);

   // Display records from the table  
   echo "";
   while ($row = mysql_fetch_array($image, MYSQL_NUM)) {
      echo "<IMAGE SOURCE='$row[0]'/><br>";
      echo "<div id='info'>Day $row[1] of ";
      echo "$row[2] Uniform Project for$row[3] </div>";
   }
   echo "";
} else {
    echo "Can't connect to the database!";
}

這可能是因為name列不明確。 我猜您在CausePilot (或其他一些表)中都有一個name列。 MySQL無法猜測您要從哪個表中檢索列值,並且會吐出一個錯誤( 字段列表中的列名不明確 )。

確保使用表名在列名前添加前綴以消除歧義:

SELECT 
   imageUrl, outfitDay_id, Cause.name, Pilot.name 
FROM 
   OutfitImage, Pilot, Cause

您正在嘗試對所有三個表進行交叉聯接,但沒有創建任何條件將它們過濾掉。 子句FROM table1,table2,table3嘗試對所有三個表進行交叉聯接。 交叉聯接是指將一個表中的每一行與另一表中的每一行配對。 例如,假設我有三個表,每個表都有兩行。 我將第一個表命名為jack和jill兩行,第二個表將命名為21行和24行年齡,第三個表是性別,並包含男性和女性行。 如果我從名字,年齡,性別做一個子句,它將返回一個2 X 2 X 2 = 8行的表。

names ages genders
jack  21   male
jack  21   female
jack  24   male
jack  24   female
jill  21   male
jill  21   female
jill  24   male
jill  24   female

通常,當您交叉聯接時,您還向WHERE添加條件以過濾掉沒有意義的行。 例如,在示例FROM子句中,您可能具有WHERE sex.id = names.genders_id。 在這種情況下,您正在將名稱鏈接到性別表中的特定性別行。 這也可能會解決您對LIMIT 1的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM