Проблема с INNER JOIN

Rowest

Я новичок, поэтому не ругайтесь особо)Есть три таблицы, которые нужно объединить с помощью INNER JOIN и вывести некоторые поля.Вот создание таблиц: $query = "CREATE TABLE DevInfo ( IDD char(255) Primary Key NOT NULL, namedev char(255) NOT NULL, countryd char(255) NOT NULL, adressd char(255) NOT NULL, directord char(255) NOT NULL, phoned char(255) NOT NULL )";$result = mysql_query($query) or die("Error man1 :".mysql_error());$query = "CREATE TABLE Toy( IDT int Primary Key, namet char(255) NOT NULL, aget int NOT NULL, pricet int NOT NULL, IDDs char(255) references DevInfo(IDD))";$result = mysql_query($query) or die("Error man3 :".mysql_error());$query = "CREATE TABLE ******* ( IDT int references Toy(IDT), dateb char(255) NOT NULL, count int NOT NULL, cash int NOT NULL)";$result = mysql_query($query) or die("Error man5 :".mysql_error());Создание проходит гладко, внесение данных в таблицы тоже. Проблемы начинаются, когда я пытаюсь таблицы объединить и вывести некоторые поля: $query = "SELECT Toy.IDT, Toy.namet, Toy.IDDs, Toy.aget, Toy.pricet, *******.dateb, *******.count, *******.cash, DevInfo.countryd FROM (Toy INNER JOIN ******* ON Toy.IDT = *******.IDT) INNER JOIN DevInfo ON DevInfo.IDD = Toy.IDDs" or die("WTF".mysql_error());$result = mysql_query($query);Никаких предупреждений, ошибок или чего-либо подозрительного нет, но и запрос не выполняется, потому что когда я пытаюсь его вывести на экран, то показывает только шапку из полей таблиц. Содержимого нет.И что примечательно, если пытаться объединить только таблицы Toy и *******, то всё проходит гладко. Есть записи, всё кошерно.Проблема именно в join'e таблиц Toy и DevInfo (я пытался по аналогии объединить только их, ничего не получилось, хотя с таблицами Toy и ******* получилось)Помогите мне пожалуйста, я уже не знаю, что делать :( На всякий случай еще приведу код вывода содержимого на экран:function resultbrowser($result){ echo "\n"; $n = mysql_num_fields($result); for ($i=0; $i<$n; $i++){ $name=mysql_field_name($result, $i); echo "" ; } echo "" ; while ($line=mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t\n" ; foreach ($line as $col_value) { echo "\t\t\n" ; } echo "\t\n" ; } echo "
$name
$col_value
\n" ; echo("
"); }HELP!!
17 ответов

Rowest

Rowest,Эти ваши
or die("Error man WTF :")
и прочие простыни из пехапе никому не нужны. Достаточно было DDL таблиц и собственно запроса.У вас PHPMyAdmin в наличии ? Или консоль MySQL?Прежде чем совать запрос в mysql_query() нормальные люди выполняют его в консоли, а удостоверившись, что он все-таки работает, пихают в пхп.


Rowest

1)
SELECT Toy.IDT, Toy.namet, Toy.IDDs, Toy.aget, Toy.pricet, 
*******.dateb, *******.count, *******.cash, DevInfo.countryd 
FROM <span>(</span>Toy 
INNER JOIN ******* ON Toy.IDT = *******.IDT<span>)</span> 
INNER JOIN DevInfo ON DevInfo.IDD = Toy.IDDs
зачем вам эти скобки?2)
Проблема именно в join'e таблиц Toy и DevInfo (я пытался по аналогии объединить только их, ничего не получилось, хотя с таблицами Toy и ******* получилось)
что именно "не получилось"? где сообщение об ошибке?3)пользуйтесь тегом [ src ]


Rowest

1) <pre class="prettyprint linenums">SELECT Toy.IDT, Toy.namet, Toy.IDDs, Toy.aget, Toy.pricet, *******.dateb, *******.count, *******.cash, DevInfo.countryd FROM <span>(</span>Toy INNER JOIN ******* ON Toy.IDT = *******.IDT<span>)</span> INNER JOIN DevInfo ON DevInfo.IDD = Toy.IDDs </pre> зачем вам эти скобки?2)что именно "не получилось"? где сообщение об ошибке?3)пользуйтесь тегом [ src ]
Скобочки для удобства, без них всё так же гибло...Никаких предупреждений, ошибок или чего-либо подозрительного нет, но и запрос не выполняется, потому что когда я пытаюсь его вывести на экран, то показывает только шапку из полей таблиц. Содержимого нет.


Rowest

Никаких предупреждений, ошибок или чего-либо подозрительного нет, но и запрос не выполняется, потому что когда я пытаюсь его вывести на экран, то показывает только шапку из полей таблиц. Содержимого нет.
Из чего делаем вывод, что в таблице "девинфо" нет записей, "стыкующихся" с таблицей "той".


Rowest

Заполнение таблицы DevInfo$IDD = array("0101", "0102"); $namedev = array ("Іграшка", "Канцел"); $countryd = array ("Україна", "Росія"); $adressd = array ("Миколаїв, вул. Чигрина 15", "Ростов, вул. Дзерджинського 55"); $directord = array ("Терів Д.А.", "Заворотна Л.Л."); $phoned = array ("66-66-99", "78-98-98");for ($i = 0; $i < count($IDD); $i++) { $query="INSERT INTO DevInfo (IDD, namedev, countryd, adressd, directord, phoned) values (' $IDD[$i] ','$namedev[$i]','$countryd[$i]','$adressd[$i]', '$directord[$i]', '$phoned[$i]')" ; $result=mysql_query($query) or die("Error man2 :".mysql_error());Заполнение таблицы Toy$IDT=array(1, 2); $namet=array("Літак", "Танк" ); $aget=array(10, 8); $pricet=array(100, 80); $IDD=array("0101", "0102" );for ($i=0; $i < count($IDT); $i++) { mysql_query("INSERT INTO Toy(IDT, namet, aget, pricet, IDD) values ('$IDT[$i]', '$namet[$i]' , '$aget[$i]' , '$pricet[$i]' , '$IDD[$i]' ) ")or die(" Error man4 :".mysql_error()); } Как видите пересекающиеся значения есть


Rowest

Упс, в таблице Toy поле не IDD, а IDDs, скопировал старую версию просто) Вобще непонятно, почему так происходит. Inner Join таблиц ******* с таблицей Toy проходит на ура, но эта же операция с Toy и DevInfo - без результатов.


Rowest

Rowest, ну сделайте toys left join devinfo по тому же условию и убедитесь, что где-то что-то вы всё-таки написали неправильно :)


Rowest

То, что там где-то есть ошибка, я и так знаю) Иначе бы всё получилось. Я поэтому и тему создал, думал, может вы сможете мне помочь как-нибудь)


Rowest

Rowest, вы запрос с лефтджойном написали или нет?


Rowest

Rowest, вы запрос с лефтджойном написали или нет?
tanglir, да, написал. Еще давно, еще перед тем даже, как тему эту создавать. Но специально написал еще раз, вот код:
"SELECT Toy.IDT, Toy.namet, DevInfo.IDD, DevInfo.namedev, 

DevInfo.countryd FROM Toy LEFT JOIN DevInfo ON Toy.IDDs = DevInfo.IDD"
Показывает значения полей, что я указал, из таблицы Toy, но пусто в полях таблицы DevInfo.По идее же хотябы поле DevInfo.IDD должно было показать, там ведь есть совпадения.Или я не прав?


Rowest

Rowest,Сделайте уже дамп своих таблиц с данными и выложите куда-нибудь, чтобы можно было сказать что у вас там не так.


Rowest

Rowest,Сделайте уже дамп своих таблиц с данными и выложите куда-нибудь, чтобы можно было сказать что у вас там не так.
Выложил архивчиком (извините, что с использованием php-кода, но так будет наглядней) cкачать


Rowest

Rowest,Вы врете, молодой человек. Ничего вы с лефт джойном не писали. Я только что попробовал и вывелась ваша многострадальная таблица.


Rowest

Rowest,Да, оно кстати бы и с INNER JOIN работало, если б не один лишний пробел. Где именно - поищите сами.


Rowest

Выложил архивчиком (извините, что с использованием php-кода, но так будет наглядней)
наглядней было бы архив с двумя табличками в csv и одним запросом в плейнтексте. А
Rowest,Эти ваши <pre class="prettyprint linenums">or die("Error man WTF :") </pre> и прочие простыни из пехапе никому не нужны.


Rowest

Rowest,Вы врете, молодой человек. Ничего вы с лефт джойном не писали. Я только что попробовал и вывелась ваша многострадальная таблица.
Да где же я вру, когда я и код вам привел, и написал, какой результат вышел.
Показывает значения полей, что я указал, из таблицы Toy, но пусто в полях таблицы DevInfo.По идее же хотябы поле DevInfo.IDD должно было показать, там ведь есть совпадения.Или я не прав?
Rowest,Да, оно кстати бы и с INNER JOIN работало, если б не один лишний пробел. Где именно - поищите сами.
А вот за это спасибо, буду искать, где пробел лишний. tanglir, я извинился за php-код. Опыта наберусь, буду всё красиво оформлять


Rowest

MikkiMouse, Огромное вам человеческое СПАСИБО! :) Всё получилось. Пробелы такие пробелы..