2012-05-26 2 views
-1

У меня есть два отдельных таблиц в моей БД, здесь соответствующие поля:Объединение MySQL запросов

стол изображения:

CREATE TABLE `images` (
    `image_id` int(4) NOT NULL AUTO_INCREMENT, 
    `project_id` int(4) NOT NULL, 
    `user_id` int(4) NOT NULL, 
    `image_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `image_description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `date_created` date NOT NULL, 
    `link_to_file` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `link_to_thumbnail` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `given_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `note` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`image_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=51 ; 

и настольные проекты:

CREATE TABLE `projects` (
    `project_id` int(4) NOT NULL AUTO_INCREMENT, 
    `user_id` int(4) NOT NULL, 
    `project_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `project_description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `date_created` date NOT NULL, 
    `date_last_edited` date NOT NULL, 
    `shared` int(1) NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`project_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=25 ; 

Я хотел бы, чтобы отобразить в переменной $ content, галерее самого старого изображения из каждого проекта в качестве ссылки на эту страницу проекта, и я понятия не имею, как должен строиться запрос mysql. Не могли бы вы мне помочь? Я пробовал несколько утверждений if и while, но результаты были полными неудачами, и я нахожусь в конце моих (очень ограниченных) знаний. Я собирался выпрыгнуть из окна ...

Так что я хотел бы закончить с

<a href="index.php?page=projects&id='.$projectid.'"> 
    <img src="oldest_photo_of_project_x" /> 
</a> 
<a href="index.php?page=projects&id='.$projectid.'"> 
    <img src="oldest_photo_of_project_y" /> 
</a> 
<a href="index.php?page=projects&id='.$projectid.'"> 
    <img src="oldest_photo_of_project_z" /> 
</a> 

Update1:

Для уточнения я пытаюсь совместить:

"SELECT * FROM projects WHERE user_id='$UserID' ORDER BY project_id DESC" 

И может быть примерно следующее:

$query = "SELECT images.project_id, projects.project_name ". 
"FROM images, projects ". 
"WHERE images.project_id = projects.project_id"; 
+0

Что вы имеете в виду «дисплей в переменной»? – eggyal

+0

@eggyal: Я имею в виду эхо результаты в переменную, поэтому я могу позже в html do ' ' – PartisanEntity

+0

Хорошо, тогда эта переменная должна содержать значительно больше, чем просто результаты базы данных - ей нужно будет провести структурированную разметку. Это необычная практика, и я подозреваю, возможно, не то, что вы хотите сделать. Лучше выводить непосредственно как один цикл по набору записей базы данных. – eggyal

ответ

1

Не проверял на наличие ошибок, но я хотел бы сделать что-то вроде этого:

$result = mysql_query("SELECT DISTINCT 
    `projects`.`project_id` AS `project`, 
    `images`.`link_to_file` AS `filepath` 
FROM 
    `projects`, 
    `images` 
WHERE 
    `projects`.`project_id` = `images`.`project_id` 
ORDER BY 
    `images`.`date_created` DESC"); 

while ($resultLoop = mysql_fetch_array($result)) { 
    $str .= '<a href="index.php?page=projects&id=' . $resultLoop["project"] . '"> 
     <img src="' . $resultLoop["filepath"] . '" /> 
    </a>'; 
} 


echo $str; 
+0

Большое спасибо! Это то, что я ищу, единственное, что результаты должны быть ограничены пользователями user_id, которые являются переменной, которую я храню в сеансе, она также хранится в проектах и ​​изображениях. – PartisanEntity

+0

вы можете добавить это к строке WHERE, как таковой: WHERE 'projects'.'project_id' =' images'.'project_id' AND 'projects'.'user_id' =". $ Userid. " ORDER BY и т. Д. – Jared

+0

Большое спасибо, после небольшой настройки, это работает именно так, как мне нужно. – PartisanEntity

1

Что-то вроде этого извлечет данные о изображениях из базы данных.

SELECT * FROM `images` WHERE `project_id`="x" ORDER BY `date_created` ASC LIMIT 1,1; 

Это будет извлечь самое старое изображение для проекта с идентификатором 'x'. Вы можете приковать их следующим образом:

SELECT * FROM `images` WHERE `project_id`="x" ORDER BY `date_created` ASC LIMIT 1,1; 
SELECT * FROM `images` WHERE `project_id`="y" ORDER BY `date_created` ASC LIMIT 1,1; 
SELECT * FROM `images` WHERE `project_id`="z" ORDER BY `date_created` ASC LIMIT 1,1; 

Если вы используете PHP, вы можете использовать mysqli_result :: fetch_array, чтобы получить результаты, которые должны содержать результаты для всех 3-х запросов.

+0

Спасибо, но это не совсем то, что я имею в виду. Я обновил свой оригинальный пост. – PartisanEntity

0
$dbh = new PDO($DSN, $USERNAME, $PASSWORD); 
$qry = $dbh->prepare(' 
    SELECT project_id, link_to_thumbnail 
    FROM  images NATURAL JOIN (
    SELECT project_id, MIN(date_created) AS date_created 
    FROM  images 
    GROUP BY project_id 
    WHERE user_id = ? 
) AS t 
    ORDER BY project_id DESC 
'); 
$qry->bindValue(1, $UserID); 
$qry->execute(); 

while ($row = $qry->fetch()) echo " 
    <a href=\"index.php?page=projects&id=$row[project_id]\"> 
    <img src=\"$row[link_to_thumbnail]\"/> 
    </a> 
"; 
+0

Спасибо, попробуем сейчас – PartisanEntity

Смежные вопросы