PHP

Откуда при выводе строк из БД появляются дубликаты? Строки два раза выводятся + скрин

hostingkartinok.com/show-image.php?id=563d9b648add301c5edcb2d4da0c918f
Добавь к выводу имя автора - станет понятно, откуда дубликаты. Зачем ты вообще делаешь JOIN, если данные из таблицы авторов вообще никак не используются?

Уверен, что таблицы books и autors не имеют столбцов с совпадающими названиями. Потому NATURAL JOIN работает как JOIN без ON - выводятся все возможные комбинации строк books и authors.
Igor Kats
Igor Kats
69 752
Лучший ответ
Сергей Гудков Но у меня в таблице нет автора. Попробую добавить в таблицу автора и потом посмотрю что получится. А зачем делаю JOIN не знаю, я еще плохо шарю в php и всё делаю по книге.
1. а зачем в запросе присоединять таблицу авторов. в исходной таблице для книг не указан идентификатор автора.
2. срочно отказывайтесь от функций mysql, переходите на pdo. mysql - устарело и в php 7.0 удалено. См - http://php.net/manual/ru/function.mysql-close.php
Обратите внимание, в этом запросе нет необходимости указывать какие-либо критерии объединения, поскольку предложение NATURAL JOIN автоматически определяет столбцы, имеющие одинаковые имена в обеих объединяемых таблица, и помещает их в «скрытое» предложение USING. Если первичные и внешние ключи имеют одинаковые имена, этот подход может показаться полезным, однако это не так.

В базе данных Sakila, каждая таблица имеет столбец last_update, который автоматически используется предложением NATURAL JOIN. Таким образом, запрос NATURAL JOIN эквивалентен следующему запросу, который, конечно же, не имеет никакого смысла:

SELECT *

FROM actor

JOIN film_actor USING (actor_id, last_update)

JOIN film USING (film_id, last_update)
Итак, сразу же забудьте о NATURAL JOIN и никогда не используйте этот вариант (за исключением очень редких случаев, таких как объединение диагностических представлений Oracle, например, v$sql NATURAL JOIN v$sql_plan, в целях специализированной аналитики).