|
|
|
| есть 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 в первых двух таблицах (либо в первой либо во второй)
как мне это сделать? | |
|
|
|
|
|
|
|
для: Up1T3R
(14.04.2006 в 15:41)
| | И как определяется, в какой именно таблице брать поле? | |
|
|
|
|
|
|
|
для: 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_query, MYSQL_ASSOC);
?>
Массив будет представлять собой набор переменных:
$row['something_1'], $row['something_2'] и т.д.
|
| |
|
|
|
|
|
|
|
для: 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)
может ли кто нибудь помочь мне составить запрос с использованием именно этих названий таблиц и столбцов? | |
|
|
|
|
|
|
|
для: Up1T3R
(15.04.2006 в 11:14)
| | А чем таблица table1 отличается от таблицы table2 - почему их две - у них равнозначные записи? | |
|
|
|
|
|
|
|
для: 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($res, MYSQL_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($res, MYSQL_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($res, MYSQL_ASSOC);
echo "<a href=item.php?id=".$rows[itemId].">".$row['Name']."</a>"
// и еще так, на всякий случай, проверим, может это значение вообще не совпадает ни с одним из идентификаторов в первых двух (если база составлена правильно, то этого сегмента не понадобится):
} else {
echo "В базе нет таких товаров!";
}
}
?>
|
После этого по идее на вашей странице должен быть выведен весь список, соответствующий mag_id=1. | |
|
|
|
|
|
|
|
для: Anwor
(15.04.2006 в 13:41)
| | Более чем понятно. Спасибо | |
|
|
|