[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: что исправить в запросе
DenisD
есть таблица А и таблица B

таблица А состоит из столбцов имен с полями 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 написал(а):
Если я правильно понял

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
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 = {номер строки}


для твоей организации БД.

как трактовать правильно ваш пример
что есть 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. И по результату уже анализируй - рабочий ли он и насколько.

Спустя 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 /> 
'
.$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"].'';
// ...
}

спасибо земляк ты лучший!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.