Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: thc в Oct 02, 2006, 17:18



Титла: Специфична sql заявка - select + join
Публикувано от: thc в Oct 02, 2006, 17:18
Здравейте, ползвам CMS php-fusion и искам да си направя панел в който да се показват като линкове двата най нови албума и двата албума в които последно са добавяни снимки. Албумите и снимките се съхраняват в отделни таблици, като в таблицата за снимките имам външен ключ който ми показва към кой албум принадлежи дадената снимка.
Проблема ми е че съм начинаещ в SQL и не знам как трябва да изглежда тази заявка, предполагам че ще се използва обединение на две таблици, но всичките ми опити до сега са без успех.
Някой може ли да помогне?
Благодаря


Титла: Специфична sql заявка - select + join
Публикувано от: dilyan в Oct 02, 2006, 17:49
не казваш каква ти е базата данни, но трябва да е нещо от сорта на:
select *,* from albumi join snimki on (snimki.kliu4 = albumi.kliu4);

където kliu4 са ти полетата по които навързваш таблиците. В PostgreSQL синтаксиса е такъв, за друга база - сам си го написал: ask google :)


Титла: Специфична sql заявка - select + join
Публикувано от: thc в Oct 05, 2006, 15:21
Много се мъчих и не можах да постигна елегантното решение за което си мислех. Поствам все пак това което съм направил с идеята да помогне на някой друг и да го видят професионалистите, които да кажат как да стане по добре  :ok:

Примерен код
<?php
openside("&#207;&#238;&#241;&#235;&#229;&#228;&#237;&#232; &#224;&#235;&#225;&#243;&#236;&#232;");
$sql = "SELECT album_id, album_title, date_format(from_unixtime( album_datestamp ), '%e/%c/%y at<BR>&nbsp;%H:%i')
   FROM fusion_photo_albums
   ORDER BY album_datestamp DESC
   LIMIT 0 , 2";

$sql0 = "SELECT fusion_photos.album_id, album_title, date_format(from_unixtime( photo_datestamp ), '%e/%c/%y at<BR>&nbsp;%H:%i')
   FROM fusion_photos, fusion_photo_albums
   WHERE fusion_photo_albums.album_id = fusion_photos.album_id
   ORDER BY photo_datestamp DESC
   LIMIT 0 , 1";

   
$que = mysql_query($sql);
$que0 = mysql_query($sql0);
if (!$que) die ('Could not execute query: ' . mysql_error());
if (!$que0) die ('Could not execute query: ' . mysql_error());
?>

<TABLE border="0">

    <TR><TD><FONT SIZE="1"><B>&#196;&#238;&#225;&#224;&#226;&#229;&#237;&#232;</B></FONT></TD></TR>

<?php
while ($row = mysql_fetch_row($que)) {
   $item = trimlink($row[1], 20);
   echo ("<TR><TD><img src='".THEME."images/bullet.gif' alt=''>&nbsp;<FONT SIZE=1><A HREF=photogallery.php?album_id=$row[0]>$item&nbsp;</A></FONT></TD><TD><FONT SIZE=1>&nbsp;$row[2]</FONT></TD></TR>");
        }
?>
</TABLE>

<TABLE border="0">

    <TR><TD><FONT SIZE="1"><B>&#206;&#225;&#237;&#238;&#226;&#229;&#237;&#232;</B></FONT></TD></TR>

<?php

while ($row0 = mysql_fetch_row($que0)) {
   $item0 = trimlink($row0[1], 20);
   echo ("<TR><TD><img src='".THEME."images/bullet.gif' alt=''>&nbsp;<FONT SIZE=1><A HREF=photogallery.php?album_id=$row0[0]>$item0&nbsp;</A></FONT></TD><TD><FONT SIZE=1>&nbsp;$row0[2]</FONT></TD></TR>");
   $firstup = $row0[0];
   }

$sql1 = "SELECT fusion_photos.album_id, album_title, date_format(from_unixtime( photo_datestamp ), '%e/%c/%y at<BR>&nbsp;%H:%i')
        FROM fusion_photos, fusion_photo_albums
        WHERE fusion_photo_albums.album_id = fusion_photos.album_id
        AND fusion_photo_albums.album_id != $firstup
        ORDER BY photo_datestamp DESC
        LIMIT 0, 1";

$que1 = mysql_query($sql1);
if (!$que1) die ('Could not execute query: ' . mysql_error());
while ($row1 = mysql_fetch_array($que1)) {
   $item1 = trimlink($row1[1], 20);
   echo ("<TR><TD><img src='".THEME."images/bullet.gif' alt=''>&nbsp;<FONT SIZE=1><A HREF=photogallery.php?album_id=$row1[0]>$item1&nbsp;</A></FONT></TD><TD><FONT SIZE=1>&nbsp;$row1[2]</FONT></TD></TR>");
   }
?>

</TABLE>

<?php
closeside();
?>


Титла: Специфична sql заявка - select + join
Публикувано от: VladSun в Oct 09, 2006, 13:57
Код
GeSHi (SQL):
  1. SELECT fusion_photos.album_id, album_title, date_format(from_unixtime( photo_datestamp ), '%e/%c/%y %H:%i')
  2. FROM fusion_photos
  3. INNER JOIN fusion_photo_albums
  4. ON fusion_photo_albums.album_id = fusion_photos.album_id
  5. ORDER BY photo_datestamp DESC
  6. LIMIT 0 , 1

Това мисля, че е обединението на твоите две таблици.


Титла: Специфична sql заявка - select + join
Публикувано от: thc в Oct 27, 2006, 19:38
Цитат (VladSun @ Окт. 09 2006,13:57)
Примерен код

SELECT fusion_photos.album_id, album_title, date_format(from_unixtime( photo_datestamp ), '%e/%c/%y at<BR>&nbsp;%H:%i')
FROM fusion_photos
INNER JOIN fusion_photo_albums
ON fusion_photo_albums.album_id = fusion_photos.album_id
ORDER BY photo_datestamp DESC
LIMIT 0 , 1

Това мисля, че е обединението на твоите две таблици.

Мерси за акъла, стана само че като добавих и GROUP BY, понеже повтаряше едно и също. Ето и цялата зявка:
Примерен код
"SELECT fusion_photos.album_id, album_title, date_format(from_unixtime( photo_datestamp ), '%e/%c/%y at<BR>&nbsp;%H:%i')
        FROM fusion_photos
        INNER JOIN fusion_photo_albums
        ON fusion_photo_albums.album_id = fusion_photos.album_id
        GROUP BY album_id
        ORDER BY photo_datestamp DESC
        LIMIT 0 , 1";