|
|
|
| Допустим есть две таблицы:
authors
id_autors name email id_dni
dni
id_dni name
Как сделать что бы id_dni в первой таблице при выводе информации в браузере отображались как 'dni'.'name' | |
|
|
|
|
|
|
|
для: lidil
(28.09.2009 в 21:07)
| | Для этого можно воспользоваться двухтабличным запросом
SELECT authors.id_author, authors.name, authors.email, dni.name
FROM authors LEFT JOIN dni ON (authors.id_dni = dni.id_dni)
GROUP BY authors.id_authors
|
| |
|
|
|
|
|
|
|
для: cheops
(28.09.2009 в 21:10)
| | Не работает выводит ошибку
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\read.php on line 12 | |
|
|
|
|
|
|
|
для: lidil
(28.09.2009 в 21:36)
| | А если вывести mysql_error() перед этим, что пишет? | |
|
|
|
|
|
|
|
для: lidil
(28.09.2009 в 21:36)
| | В phpMyAdmin ? :) | |
|
|
|
|
|
|
|
для: cheops
(28.09.2009 в 21:10)
| | Здесь, очевидно, id_dni - первичный ключ. А значит не нужен GROUP BY , тем паче, такой корявый GROUP BY.
Более полезным оказался бы алиас, т.к. иначе имена столбиков authors.name и dni.name теряют однозначность.
SELECT authors.id_author, authors.name, authors.email, dni.name AS dni_name
FROM authors
LEFT JOIN dni ON (authors.id_dni = dni.id_dni)
|
Если dni.id_dni неуникален, то некорявым GROUP BY был бы запрос вроде
SELECT authors.id_author, authors.name, authors.email, MAX(dni.name) AS dni_name
FROM authors LEFT JOIN dni ON (authors.id_dni = dni.id_dni)
GROUP BY authors.id_authors
|
Хотя и здесь до абсолютной чистоты далеко. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2009 в 21:49)
| | Да PHP ADMIN.
id_dni действительно первичный ключ. Ваш первый вариант сработал. Вышла информация в браузере но поле "день недели" осталось незаполненым.
Вот мой read c вашей корективой
<?php
//Подключаемся к БД.
$db=mysql_connect("localhost", "пппп", "111111") or die("Ошибка подключения");
mysql_select_db("test", $db) or die("Не могу выбрать БД");
@mysql_query("SET NAMES UTF-8");
$q = mysql_query("SELECT authors.id_author, authors.name, authors.email, authors.text, dni.name AS dni_name
FROM authors
LEFT JOIN dni ON (authors.id_author = dni.id_dni)");
while($r = mysql_fetch_array($q)) {
echo "Ваше имя:<a href=\"mailto:$r[email]\">$r[name]</a><br/>Вы написали: $r[text]<br/>день недели: $r[id_dni]<br/><br/>";
}
?>
|
В Вашем коде меня смущает dni_name? Объясните если не ошибка. | |
|
|
|
|
|
|
|
для: lidil
(28.09.2009 в 23:04)
| | >В Вашем коде меня смущает dni_name? Объясните если не ошибка.
...<br/>день недели: $r[dni_name]<br/>...
dni_name - это алиас (псевдоним, временное название столбика)
>Да PHP ADMIN.
phpMyAdmin не пишет вот такого Warning: mysql_fetch_array(): supplied argument is n
Проосто нужно всё же разделять неработающий sql-запрос и неработающий php-скрипт. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2009 в 23:45)
| | Я так как же быть? | |
|
|
|
|
|
|
|
для: lidil
(29.09.2009 в 00:00)
| | >Я так как же быть?
быть как я
написал.
Жирным. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2009 в 23:45)
| | Да, если после AS пишу name в поле имя выводит вместо имен дни недели т.е. dni.name | |
|
|
|
|
|
|
|
для: lidil
(29.09.2009 в 00:04)
| | Потрудитесь рисовать текущую картину более четко.
Вы буквы экономите в ответе? | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2009 в 00:05)
| | Пытаясь корректировать Ваш код ввел :
SELECT authors.id_author, authors.name, authors.email, authors.text, dni.name AS name
FROM authors
LEFT JOIN dni ON (authors.id_author = dni.id_dni)
| .
Вместо dni_name, просто name. Получил:
Ваше имя:ЧЕТВЕРГ
Вы написали: ooo
день недели:
Ваше имя:ПЯТНИЦА
Вы написали: движемся вперед
день недели:
а если писать так как Вы dni_name выходит
Ваше имя:hhh
Вы написали: ooo
день недели:
Ваше имя:Ваня
Вы написали: движемся вперед
день недели:
День недели не пишет ни в одном ни в другом случае, однако в первом, выводится не dni . id_dni а dni . name. То, что нужно ноо не там где надо. | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2009 в 00:05)
| | Спасибо Вам большое. Вчитываясь в свой вопрос сам понял ответ.
Вместо dni_name после AS нужно писать id_dni.
CПАСИБО!
Ваше имя:hhh
Вы написали: ooo
день недели: ЧЕТВЕРГ
Ваше имя:Ваня
Вы написали: движемся вперед
день недели: ПЯТНИЦА | |
|
|
|
|
|
|
|
для: lidil
(29.09.2009 в 00:39)
| | >Спасибо Вам большое. Вчитываясь в свой вопрос сам понял ответ.
>Вместо dni_name после AS нужно писать id_dni.
Вот этого я точно не советовал.
Выбирать алиасы так, что они совпадают с именами имеющихся столбцов - крайне опасная вещь, которая может приводить к непредсказуемым результатам.
PS. А кроме того, луча анального поноса от разработчика, который будет читать этот код позже, Вам не избежать.
Если человек читает id_dni , он внутренне готов понять столбик, как хранящий id (возможно даже из в таблицы dni,) но никак не нечто, в чем живет имя. | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2009 в 00:49)
| | Все эти дни мне не нужны я просто пытаюсь изучить этот вопрос на простом примере. В дальнейшем будет база которая будет содержать имена часто повторяющиеся как дни недели. Не хотелось бы что бы они (имена) загружали память когда можно использовать id. Если Вы говорите ,что так делать нельзя тогда как можно. Результат ведь вышел. Мне это нужно не для разработчика, вроде как я он и есть, а для читателя. | |
|
|
|
|
|
|
|
для: lidil
(29.09.2009 в 01:06)
| | 1. У Вас уже есть в таблице имя id_dni . Нельзя давать алисас, совпадающий с имеющимся именем столбца в запросе. То есть можно, но... ну это как в семье сына именем отца назвать. Вроде можно, но неудобств бытовых потом выше крыши.
2. конкретно про id_dni . Не id у Вас там, а name. А Вы пишете id .Значит вводите того, кто читает текст, в заблуждение. А sql и без того штука непростая. | |
|
|
|
|
|
|
|
для: Trianon
(29.09.2009 в 01:13)
| | Я не понимаю. Ведь будущие посетители моего сайта не видят все это чем мы занимаемся, они видят результат, а конкректно:
Ваше имя:dima
Вы написали: ym
день недели: ВОСКРЕСЕНЬЕ
Ваше имя:Дмитрий
Вы написали: Все вышло, ура товарищи, ура!!!
день недели: ПОНЕДЕЛЬНИК
Правильно? Им наплевать где какое id. Они заполнили форму, разместили информацию на сайте и забыли. | |
|
|
|
|
|
|
|
для: lidil
(29.09.2009 в 01:20)
| | Но Вы-то не их спрашиваете, а меня? | |
|
|
|