Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ключи и имена
 
 автор: lidil   (28.09.2009 в 21:07)   письмо автору
 
 

Допустим есть две таблицы:
authors
id_autors name email id_dni

dni
id_dni name

Как сделать что бы id_dni в первой таблице при выводе информации в браузере отображались как 'dni'.'name'

  Ответить  
 
 автор: cheops   (28.09.2009 в 21:10)   письмо автору
 
   для: 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

  Ответить  
 
 автор: lidil   (28.09.2009 в 21:36)   письмо автору
 
   для: 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

  Ответить  
 
 автор: cheops   (28.09.2009 в 21:49)   письмо автору
 
   для: lidil   (28.09.2009 в 21:36)
 

А если вывести mysql_error() перед этим, что пишет?

  Ответить  
 
 автор: Trianon   (28.09.2009 в 21:50)   письмо автору
 
   для: lidil   (28.09.2009 в 21:36)
 

В phpMyAdmin ? :)

  Ответить  
 
 автор: Trianon   (28.09.2009 в 21:49)   письмо автору
 
   для: 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

Хотя и здесь до абсолютной чистоты далеко.

  Ответить  
 
 автор: lidil   (28.09.2009 в 23:04)   письмо автору
 
   для: 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? Объясните если не ошибка.

  Ответить  
 
 автор: Trianon   (28.09.2009 в 23:45)   письмо автору
 
   для: 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-скрипт.

  Ответить  
 
 автор: lidil   (29.09.2009 в 00:00)   письмо автору
 
   для: Trianon   (28.09.2009 в 23:45)
 

Я так как же быть?

  Ответить  
 
 автор: Trianon   (29.09.2009 в 00:04)   письмо автору
 
   для: lidil   (29.09.2009 в 00:00)
 

>Я так как же быть?

быть как я
написал.
Жирным.

  Ответить  
 
 автор: lidil   (29.09.2009 в 00:04)   письмо автору
 
   для: Trianon   (28.09.2009 в 23:45)
 

Да, если после AS пишу name в поле имя выводит вместо имен дни недели т.е. dni.name

  Ответить  
 
 автор: Trianon   (29.09.2009 в 00:05)   письмо автору
 
   для: lidil   (29.09.2009 в 00:04)
 

Потрудитесь рисовать текущую картину более четко.
Вы буквы экономите в ответе?

  Ответить  
 
 автор: lidil   (29.09.2009 в 00:21)   письмо автору
 
   для: 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. То, что нужно ноо не там где надо.

  Ответить  
 
 автор: lidil   (29.09.2009 в 00:39)   письмо автору
 
   для: Trianon   (29.09.2009 в 00:05)
 

Спасибо Вам большое. Вчитываясь в свой вопрос сам понял ответ.
Вместо dni_name после AS нужно писать id_dni.
CПАСИБО!

Ваше имя:hhh
Вы написали: ooo
день недели: ЧЕТВЕРГ

Ваше имя:Ваня
Вы написали: движемся вперед
день недели: ПЯТНИЦА

  Ответить  
 
 автор: Trianon   (29.09.2009 в 00:49)   письмо автору
 
   для: lidil   (29.09.2009 в 00:39)
 

>Спасибо Вам большое. Вчитываясь в свой вопрос сам понял ответ.
>Вместо dni_name после AS нужно писать id_dni.

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

PS. А кроме того, луча анального поноса от разработчика, который будет читать этот код позже, Вам не избежать.
Если человек читает id_dni , он внутренне готов понять столбик, как хранящий id (возможно даже из в таблицы dni,) но никак не нечто, в чем живет имя.

  Ответить  
 
 автор: lidil   (29.09.2009 в 01:06)   письмо автору
 
   для: Trianon   (29.09.2009 в 00:49)
 

Все эти дни мне не нужны я просто пытаюсь изучить этот вопрос на простом примере. В дальнейшем будет база которая будет содержать имена часто повторяющиеся как дни недели. Не хотелось бы что бы они (имена) загружали память когда можно использовать id. Если Вы говорите ,что так делать нельзя тогда как можно. Результат ведь вышел. Мне это нужно не для разработчика, вроде как я он и есть, а для читателя.

  Ответить  
 
 автор: Trianon   (29.09.2009 в 01:13)   письмо автору
 
   для: lidil   (29.09.2009 в 01:06)
 

1. У Вас уже есть в таблице имя id_dni . Нельзя давать алисас, совпадающий с имеющимся именем столбца в запросе. То есть можно, но... ну это как в семье сына именем отца назвать. Вроде можно, но неудобств бытовых потом выше крыши.

2. конкретно про id_dni . Не id у Вас там, а name. А Вы пишете id .Значит вводите того, кто читает текст, в заблуждение. А sql и без того штука непростая.

  Ответить  
 
 автор: lidil   (29.09.2009 в 01:20)   письмо автору
 
   для: Trianon   (29.09.2009 в 01:13)
 

Я не понимаю. Ведь будущие посетители моего сайта не видят все это чем мы занимаемся, они видят результат, а конкректно:
Ваше имя:dima
Вы написали: ym
день недели: ВОСКРЕСЕНЬЕ

Ваше имя:Дмитрий
Вы написали: Все вышло, ура товарищи, ура!!!
день недели: ПОНЕДЕЛЬНИК

Правильно? Им наплевать где какое id. Они заполнили форму, разместили информацию на сайте и забыли.

  Ответить  
 
 автор: Trianon   (29.09.2009 в 01:33)   письмо автору
 
   для: lidil   (29.09.2009 в 01:20)
 

Но Вы-то не их спрашиваете, а меня?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования