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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Отображение информации из разных таблиц MySQL

Сообщения:  [1-7] 

 
 автор: Up1T3R   (16.04.2006 в 01:27)   письмо автору
 
   для: Anwor   (15.04.2006 в 13:41)
 

Более чем понятно. Спасибо

   
 
 автор: Anwor   (15.04.2006 в 13:41)   письмо автору
 
   для: cheops   (15.04.2006 в 12:44)
 

Да, записи там слегка отличаются... (см. самый первый пост)
Посему совет такой. Сначала выполните выборку по идентификаторам двух первых таблиц и занесите значения, скажем, в 2 массива.

<?php
$res
=mysql_query("SELECT table1.itemId AS 'belong_to_first', table2.itemId AS 'belong_to_second' FROM table1, table2");
while (
$row=mysql_fetch_array($resMYSQL_ASSOC)) {
$first[]=$row['belong_to_first'];
$second[]=$row['belong_to_second'];
}
?>

таким образом, 2 массива с идентификаторами у нас есть. Теперь проверим, в каком из них содержится данное значение item_id из 3-й таблицы. Для этого несколько преобразуем ваш скрипт, вложив в него дополнительный запрос к СУБД:

<?php 
$connection 
mysql_connect("$server""$db_user""$db_pass"); 
$db mysql_select_db("$database"); 
$query "SELECT * FROM table3 WHERE mag_id=1"
$result mysql_query($query); 
while (
$rows mysql_fetch_array($result)) {
//проверяем, в первом ли оно массиве:
if (in_Array($rows['ItemID'], $first)) {
   
$res=mysql_query("SELECT Name FROM table1 WHERE ItemID=".$rows['ItemID']);
   
$row=mysql_fetch_array($resMYSQL_ASSOC);
   echo 
"<a href=item.php?id=".$rows[itemId].">".$row['Name']."</a>"
//Кстати, лучше значения переменных отделить точками...
//Теперь проверяем на наличие его во втором массиве:
} else if (in_Array($rows['ItemID'], $second)) {
   
$res=mysql_query("SELECT Name FROM table2 WHERE ItemID=".$rows['ItemID']);
   
$row=mysql_fetch_array($resMYSQL_ASSOC);
   echo 
"<a href=item.php?id=".$rows[itemId].">".$row['Name']."</a>"
// и еще так, на всякий случай, проверим, может это значение вообще не совпадает ни с одним из идентификаторов в первых двух (если база составлена правильно, то этого сегмента не понадобится):
} else {
   echo 
"В базе нет таких товаров!";
}
}
?> 

После этого по идее на вашей странице должен быть выведен весь список, соответствующий mag_id=1.

   
 
 автор: cheops   (15.04.2006 в 12:44)   письмо автору
 
   для: Up1T3R   (15.04.2006 в 11:14)
 

А чем таблица table1 отличается от таблицы table2 - почему их две - у них равнозначные записи?

   
 
 автор: Up1T3R   (15.04.2006 в 11:14)   письмо автору
 
   для: Anwor   (14.04.2006 в 23:16)
 

со сложными запросами ни чего не получается :(
(ибо опыта мало)
попробую описать ситуацию досканально
может кто нибудь напишет мне как точно должен выглядеть запрос

table1:
[-item_id-][-name-]
.......1.............asd
.......3 ............hkp
.......5.............oxz

table2:
[-item_id-][-name-]
......2............duw
......4............koc
......6............bzm

table1:
[-mag_id-][-itemid-]
.......1..............1
.......1.............4
.......1.............6
.......2.............3
.......2.............4
.......2.............5


в table3 значение столбца [-itemid-] равно значению столбцов [-item_id-] в table1 и table2

скрипт:

<?php
$connection 
mysql_connect("$server""$db_user""$db_pass");
$db mysql_select_db("$database");
$query "SELECT * FROM table3 WHERE mag_id=1";
$result mysql_query($query);
while (
$rows mysql_fetch_array($result))
{
<
a href=item.php?id=$rows[itemId]>***</a>
}
?>


скрипт отображает содержимое [-mag_id-] (в table3) со значением 1
мне же надо что бы скрипт отображал не только содержимое table3 но и значение столбцов [-name-] из table1 или table2
скрипт должен сравнивать значение столбца [-itemid-] (в table3) со значением столбцов [-item_id-] (в table1 или table2)
и в случае совпадения вписывать на место *** значение из столбца [-name-] (в table1 или table2)
может ли кто нибудь помочь мне составить запрос с использованием именно этих названий таблиц и столбцов?

   
 
 автор: Anwor   (14.04.2006 в 23:16)   письмо автору
 
   для: Up1T3R   (14.04.2006 в 15:41)
 

Вообще надо запросец сложный послать, чтобы участвовали в нем все задействованные таблицы. Поскольку тут актуален вопрос, заданный Trianon'ом, и информации слегка недостает, подскажу в общих чертах, что нужно сформировать нечто вроде нижеследующего:

SELECT table.col, table.col, ..., table.col FROM table1, table2, table3 WHERE table3.col=table1.col OR table3.col=table2.col;

Пример ОЧЕНЬ обобщенный, но показывает, как именно выполнить выборку по нескольким таблицам. Приравнивайте на здоровье что угодно чему угодно, главное - чтоб перед действующим столбцом стояло название таблицы, отделенное точкой. Для удобства отображения в переменной PHP можно еще использовать AS.

SELECT table.col AS 'something_1', table.col AS 'something_2', ..., table.col AS 'something_x' FROM table1, table2, table3 WHERE table3.col=table1.col OR table3.col=table2.col;

Тогда при выводе в РНР методом MYSQL_ASSOC сформируются следующие звенья массива:

<?php
$row
=mysql_fetch_array($res_of_queryMYSQL_ASSOC);
?>
Массив будет представлять собой набор переменных:
$row['something_1'], $row['something_2'] и т.д.

   
 
 автор: Trianon   (14.04.2006 в 15:45)   письмо автору
 
   для: Up1T3R   (14.04.2006 в 15:41)
 

И как определяется, в какой именно таблице брать поле?

   
 
 автор: Up1T3R   (14.04.2006 в 15:41)   письмо автору
 
 

есть 3 таблицы

1:
[-item_id-][-name-][-price-][-proizvoditel-][-col-]

2:
[-item_id-][-name-][-price-][-marka-]

3:
[-mag_id-][-item_id-]

у пользователя отображается содержимое третьей таблицы в виде:
<a href=item.php?id=$rows[item_Id]>***</a>

мне надо что бы вместо *** стояло название предмета
оно соответствует одному из ID в первых двух таблицах (либо в первой либо во второй)

как мне это сделать?

   

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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