таблица А состоит из столбцов имен с полями N1 N2 N3
id | N1 | N2 | N3
-----------------------
1|имя1 |имя2 |имя3 |
------------------------
2|имя4 |имя2 |имя1 |
------------------------
3|имя2 |имя3 |имя8 |
таблица B состоит из столбцов описаний и имен с полями name description
| name | description
-----------------------
имя1 |описание имени 1|
------------------------
имя2 |описание имени 2|
------------------------
имя3 |описание имени 3|
------------------------
имя4 |описание имени 4|
------------------------
имя5 |описание имени 5|
------------------------
имя6 |описание имени 6|
------------------------
имя7 |описание имени 7|
------------------------
и т.д.
помогите составить запрос
чтобы из таблицы B попадало описание в таблицу А в соответствии с именем когда пользователь выберет соответствующую строку
в результате в таблице А в выбранной строчке имена должны быть заменены на их описание точно в таком же порядке
привожу фрагмент своего текста где все получается но порядок не сохраняется
SELECT B.description FROM A,B WHERE (A.N1=B.name or A.N2=B.name or A.N3=B.name)
т.е.
например при выборе строки 2 таблицы A
я получаю:
описание имени 1 описание имени 2 описание имени 4
а мне нужно чтобы порядок сохранялся
т.е.
например при выборе строки 2 таблицы A
чтобы итог был такой:
описание имени 4 описание имени 2 описание имени 1
подскажите что нужно исправить в моем запросе
?
Спустя 10 минут, 2 секунды (15.02.2011 - 14:46) Renden написал(а):
Если я правильно понял
хм.. почитав еще раз, нифига и непонял, если тебе надо сортировку используй order by..
SELECT B.description FROM A left jon B on A.N1=B.name or A.N2=B.name or A.N3=B.name
хм.. почитав еще раз, нифига и непонял, если тебе надо сортировку используй order by..
Спустя 20 минут, 5 секунд (15.02.2011 - 15:06) Michael написал(а):
Что то типа такого:
для твоей организации БД.
SELECT b1.description, b2.description, b3.description
FROM A a1
LEFT JOIN B b1 ON a1.n1 = b1.name
LEFT JOIN B b2 ON a1.n2 = b2.name
LEFT JOIN B b3 ON a1.n3 = b3.name
WHERE a1.id = {номер строки}
для твоей организации БД.
Спустя 22 часа, 19 минут, 59 секунд (16.02.2011 - 13:26) DenisD написал(а):
Цитата (Renden @ 15.02.2011 - 11:46) |
хм.. почитав еще раз, нифига и непонял, если тебе надо сортировку используй order by.. |
ваш запрос еще хуже работает чем мой.
order by мне не нужно так как порядок должен быть в соответствии с именами а не по алфавиту
Спустя 34 минуты, 38 секунд (16.02.2011 - 14:01) DenisD написал(а):
Цитата (Michael @ 15.02.2011 - 12:06) |
Что то типа такого:SELECT b1.description, b2.description, b3.description для твоей организации БД. |
как трактовать правильно ваш пример
что есть b1 b2 b3
и как прочесть строку
LEFT JOIN B b1 ON a1.n1 = b1.name
если я правильно понимаю в записи b1.description
b-это таблица B
description-столбец таблицы B
а что означает 1
Спустя 10 минут, 43 секунды (16.02.2011 - 14:12) Michael написал(а):
Ответил в личку, отвечу и тут:
b1 b2 b3 - это разные псевдонимы для одной и той же таблицы B.
Я просто соединил таблицу A с тремя таблицами B. И их надо различать.
Совет: ты не гадай что и как в запросе, а возьми и выполни его в phpmyadmin. И по результату уже анализируй - рабочий ли он и насколько.
b1 b2 b3 - это разные псевдонимы для одной и той же таблицы B.
Я просто соединил таблицу A с тремя таблицами B. И их надо различать.
Совет: ты не гадай что и как в запросе, а возьми и выполни его в phpmyadmin. И по результату уже анализируй - рабочий ли он и насколько.
Спустя 1 час, 43 минуты, 17 секунд (16.02.2011 - 15:55) DenisD написал(а):
Цитата |
Совет: ты не гадай что и как в запросе, а возьми и выполни его в phpmyadmin. И по результату уже анализируй - рабочий ли он и насколько. |
при выборе любой строки таблицы A
я на выходе получаю только данные третьего столбца
т.е. при выборе строки 2
у меня описание 1
при выборе строки 1
у меня описание 3
может это связано с тем как я вывожу данные
while ($info=mysql_fetch_array($res))
{
echo '<br />
'.$info["description"].'';
}
Спустя 50 минут, 51 секунда (16.02.2011 - 16:46) Michael написал(а):
Так можно:
Но лучше:
echo '<br />
'.$info[0].'';
echo '<br />
'.$info[1].'';
// ...
Но лучше:
SELECT b1.description AS dd1, b2.description AS dd2, b3.description AS dd3
while ($info=mysql_fetch_array($res))
{
echo '<br />
'.$info["dd1"].'';
echo '<br />
'.$info["dd2"].'';
// ...
}
Спустя 35 минут, 52 секунды (16.02.2011 - 17:22) DenisD написал(а):
Цитата (Michael @ 16.02.2011 - 13:46) |
Так можно:echo '<br /> Но лучше: SELECT b1.description AS dd1, b2.description AS dd2, b3.description AS dd3 while ($info=mysql_fetch_array($res)) |
спасибо земляк ты лучший!!!