1

次のMysqlクエリがあります。ここでは、左結合を実行して、画像テーブルを使用してページテーブルを定義しようとしています。

$query = mysql_query("SELECT * FROM pages
                    WHERE `fname` LIKE '%$fname%' AND `lname` LIKE '%$lname%' AND `city` LIKE '%$citysearch%' AND `state` LIKE '%$statesearch%' AND `activities` LIKE '%$locationsearch%' AND `startyr` LIKE '%$startyearsearch%' AND `endyr` LIKE '%$endyearsearch%'
                     LEFT JOIN `images.pgname` WHERE `pages.pgname` = 'images.pgname' LIMIT $start, $perpage
                ");

「警告:mysql_fetch_assoc()はパラメーター1がリソースであり、72行目にブール値が指定されていることを期待しています」というメッセージが表示されます。

私がやろうとしているのは、ページテーブルと画像テーブルを結合することです。ページテーブルには、次のフィールドがあります:fname、lname、city、state、activitys、startyr、endyr、pgname

また、画像テーブルには次のフィールドがあります:pgname、id、imageUrl、username

私がやりたいのは、pages.pgnameがimages.pgnameと等しいすべての画像を返し、imageUrlを使用して画像のURLを返すことです。

どんな助けでも大歓迎です!

4

1 に答える 1

2

列「images.pgname」に参加しようとしているように見えますか? 完全なテーブルのみを結合できます。また、JOIN は WHERE 句の前にある必要があります。

では、その手順を解読してみましょう。複数のテーブルから値を選択する必要がある場合は、最初に選択するすべての値をリストします。この場合、それは a) ページのすべての列 ( pages.*) と b) 画像の imageUrl ( images.imageUrl) です。

SELECT pages.*, images.imageUrl

次に、通常どおり、選択するテーブルを指定します。

FROM pages

次に、結合を行います。左結合とは、データベースが他のテーブル (画像) で対応する行を見つけようとすることを意味します。この行が実際に存在する必要はありません。ただし、テーブルと接続を定義する条件を指定して結合を行います。

LEFT JOIN images ON pages.pgname = images.pgname

残りは同じままです:

WHERE pages.fname LIKE '%$fname%' AND pages.lname LIKE '%$lname%' AND pages.city LIKE '%$citysearch%' AND pages.state LIKE '%$statesearch%' AND pages.activities LIKE '%$locationsearch%' AND pages.startyr LIKE '%$startyearsearch%' AND pages.endyr LIKE '%$endyearsearch%'
LIMIT $start, $perpage

ただし、ページごとに複数の画像がある場合は、結合を逆にする必要があります。

SELECT pages.*, images.imageUrl
FROM images
JOIN pages ON pages.pgname = images.pgname
WHERE ...
于 2012-10-23T20:26:57.050 に答える