Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из двух таблиц
 
 автор: Лена   (02.08.2008 в 14:25)   письмо автору
 
 

Из таблицы texts выбирается один текст, который принадлежит разделу меню. Вместе с текстом из другой таблицы img нужно выбрать 4 картинки. Как сделать запрос?


У меня было вот так:

$sql="SELECT *
FROM texts, img
WHERE menu.id_menu = texts.id_menu AND menu.id_menu = img.id_menu AND menu.id_menu = $_GET['id_menu']";
$result=mysql_query ($sql, $link);
while($row = mysql_fetch_assoc($result)){
print_r($row);
}

Но в этом случае 4 раза выбирается текст - т.е. к каждой картинке выбирается один и тот же текст.
Если делать путем соединения таблиц, то пробовала вот так:

$sql="SELECT * FROM texts AS t
LEFT JOIN img AS i
ON i.id_text = t.id
WHERE t.id_menu = i.id_menu
ORDER BY i.name";

Тогда выборка идет вот так: первый текст - первая картинка, второй текст - первая картинка; первый текст - вторая картинка, второй текст - вторая картинка


А мне нужно: первый текст + 4 картинки к нему, второй текст + 4 картинки, без повторов текста. Как это сделать?

UNION использовать нельзя: в таблицах разное количество полей.

  Ответить  
 
 автор: Trianon   (02.08.2008 в 16:40)   письмо автору
 
   для: Лена   (02.08.2008 в 14:25)
 

Нужно знать структуру таблиц (раздел phpMyAdmin Экспорт, дамп структуры) и то, как соединяются эти таблицы (по каким правилам строки одной из таблиц соотносятся со строками другой.)

  Ответить  
 
 автор: Лена   (02.08.2008 в 17:04)   письмо автору
946 байт
 
   для: Trianon   (02.08.2008 в 16:40)
 

В присоединенном файле - структура таблиц

  Ответить  
 
 автор: Trianon   (02.08.2008 в 17:11)   письмо автору
 
   для: Лена   (02.08.2008 в 17:04)
 

По идее Ваш вариант с LEFT JOIN должен выдавать набор данных, не путая картинки. Я бы взял за основу именно его.

Строк вроде немного, можно дамп полностью привести (и структуру и данные), чтоб понять почему картинки путаются.

  Ответить  
 
 автор: Лена   (02.08.2008 в 17:28)   письмо автору
 
   для: Trianon   (02.08.2008 в 17:11)
 

Полный дамп привести не могу по той причине, что теперь не могу зайти в базу данных. В разделе Apache вы насоветовали мне поменять пароль. Давайте устраним сначала ту проблему, чтобы я могла привести вам полный дамп

  Ответить  
 
 автор: Trianon   (02.08.2008 в 17:42)   письмо автору
 
   для: Лена   (02.08.2008 в 17:28)
 

Надо найти каталог с phpmyadmin.
У меня , например, это Z:\home\localhost\www\Tools\phpMyAdmin
В этом каталоге найти файл config.inc.php
И в нем в строках
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'пароль';

поставить новый пароль. Тот, который Вы указали в разделе "привилегии".

  Ответить  
 
 автор: Лена   (02.08.2008 в 17:52)   письмо автору
 
   для: Trianon   (02.08.2008 в 17:42)
 

Я вам ответила. В разделе Apache.

  Ответить  
 
 автор: Лена   (02.08.2008 в 18:11)   письмо автору
2.4 Кб
 
   для: Лена   (02.08.2008 в 17:52)
 

Теперь полный дамп в аттачменте

  Ответить  
 
 автор: Trianon   (02.08.2008 в 18:32)   письмо автору
 
   для: Лена   (02.08.2008 в 18:11)
 

<?php
require_once('dbconfig.php');

$sql="SELECT *, t.id AS tid  FROM texts AS t
LEFT JOIN img AS i
ON i.id_text = t.id
WHERE t.id_menu = i.id_menu
ORDER BY t.id, i.name"
;

$res mysql_query($sql);
if(!
$res) exit("Error in $sql: "mysql_error());

for(
$p 0$row mysql_fetch_assoc($res); )
{
    if(
$p != $row['tid'])
    {
        echo 
"<hr />".$row['main_text']."<br />\r\n";
        
$p $row['tid'];
    }
    echo 
"<img src=\"".$row['name']."\" /> \r\n";;
}


?>


Сортировку пришлось слегка изменить.

  Ответить  
 
 автор: Лена   (02.08.2008 в 18:55)   письмо автору
 
   для: Trianon   (02.08.2008 в 18:32)
 

Спасибо, получилось. На самом деле все оказалось не так сложно.
Только вот здесь в конце - лишние ";":

echo "<img src=\"".$row['name']."\" /> \r\n";;


и пути к картинкам я указала

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования