更新: 最初の問題が修正されたので (ありがとう - 最初の質問を一番下に置いておきました)、適切な接続が正常に行われるようになりました。問題は、接続のある写真だけを取り込むことです。接続があるかどうかに関係なく、すべての写真を取得するにはどうすればよいですか?
JOIN の代わりに LEFT JOIN を追加すると、何もない写真に「接続」を追加することを除いて、すべての写真が取り込まれるように見えます...奇妙なものです。
これを説明するのは難しいですが、最善を尽くします。最初に、タイトルが長くなってしまったことをお詫びします。できるだけ詳しく説明しようとしました。
これは、ギャラリーに写真 (user_album2 テーブル) を表示することです。各写真には、(user_connected テーブルからの) 「接続」が表示されます。user_connected テーブルの例は次のとおりです。
fk_pic_id | fk_user_id | fk_user_id_conn
これらの各列は INT であり、写真 ID 番号、接続を確立したユーザー ID 番号、接続ユーザー ID 番号を取得します。
次のコードに表示される「get_」関数はすべて、ユーザー情報を取得する単純な関数です (つまり、「get_profession」の場合、職業 ID # を取得します)。
$query = mysql_query("SELECT a.pic_id, a.fk_user_id as uid, a.picture_number, a.picture_name, a.id, a.featuredphoto, c.fk_pic_id, GROUP_CONCAT(CONVERT(c.fk_user_id_conn, CHAR(8))) as cuids
FROM user_album2 a LEFT JOIN user_connected c ON a.pic_id = c.fk_pic_id GROUP BY a.pic_id ORDER BY RAND() LIMIT 40") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
$pic_id = $row['pic_id'];
$userid = $row['uid'];
$photonum = $row['picture_number'];
$photo = $row['picture_name'];
$photoid = $row['id'];
$featured = $row['featuredphoto'];
$photogid = $row['fk_photog_id'];
$modelid = $row['fk_model_id'];
$cuids = explode(',',$row['cuids']);
if (get_profession($userid) == 1) {
$modeltag = get_name($userid);
$modelpic = get_photo($userid);
$modelLink = get_profile_link($userid);
foreach ($cuids as $c) {
$cprof = get_profession($c);
if ($cprof == 2) {
$photogtag = get_name($c);
$photogpic = get_photo($c);
$photogLink = get_profile_link($c);
}
}
} elseif (get_profession($userid) == 2) {
$photogtag = get_name($userid);
$photogpic = get_photo($userid);
$photogLink = get_profile_link($userid);
foreach ($cuids as $c) {
$cprof = get_profession($c);
if ($cprof == 1) {
$modeltag = get_name($c);
$modelpic = get_photo($c);
$modelLink = get_profile_link($c);
}
}
}
$classMargin = $modeltag && $photogtag ? ' add-bot-margin':'';
$myreturn .= '<li>'
.'<div class="inner">'
.'<img border="0" alt="" src="'. $baseurl . $photo .'&w=188&h=150&zc=1" />'
.'<div class="details">'
.'<a href="'. $baseurl .'photos/'. $userid .'/'. $photoid .'/'. $photonum .'" class="img-link">view image <strong>here</strong></a>'
.'<div class="info-contain-details">';
if ($modeltag) {
$myreturn .= '<div class="details-info model-info'. $classMargin .'">'
.'<a href="'. $baseurl . $modelLink .'" class="link-image"><img border="0" alt="" src="'. $baseurl .'img.php?src=/memberpictures/'. $modelpic .'&w=30&h=30&zc=1" /></a>'
.'<div class="photo-info">'
.'<a href="'. $baseurl . $modelLink .'" class="link-view-more">view more from</a>'
.'<a href="'. $baseurl . $modelLink .'" class="link-username">'. $modeltag .'</a>'
.'</div>'
.'</div>';
}
if ($photogtag) {
$myreturn .= '<div class="details-info photog-info">'
.'<a href="'. $baseurl . $photogLink .'" class="link-image"><img border="0" alt="" src="'. $baseurl .'img.php?src=/memberpictures/'. $photogpic .'&w=30&h=30&zc=1" /></a>'
.'<div class="photo-info">'
.'<a href="'. $baseurl . $photogLink .'" class="link-view-more">view more from</a>'
.'<a href="'. $baseurl . $photogLink .'" class="link-username">'. $photogtag .'</a>'
.'</div>'
.'</div>';
}
$myreturn .= '</div>'
.'<span class="details-bg"></span>'
.'</div>'
.'</div>'
.'</li>';
}
修正済み: [なんらかの理由で、私は一生、職業の部分を適切に表示することができません。写真の職業の所有者がモデルである場合、写真家 = 写真家 (モデル = 1、写真家 = 2) の関係をチェックする必要があります。「user_connected」テーブルに同じ写真への行がいくつかありますが、1 人のモデルと 1 人の写真家である必要があるのに、同じ 2 人のユーザー (両方の「モデル」) が表示され続けます。 " $cfprof if ステートメントにサインインしてください、DOH!
他の情報が必要な場合はお知らせください。いつものように、どんな助けも大歓迎です!