Ошибки и нелогичность в запросах

  • Автор темы Автор темы Nicolas Prof
  • Дата начала Дата начала

Nicolas Prof

Guest
Ошибки и нелогичность в запросах

Существует 2 таблицы "Покемоны-учителя" и "Покемоны-студенты". Эти таблицы немного отличаются, но у обоих есть поле id. Акцентирую внимание, что это несвязанные таблицы.

Запрос из скрипта который позволяет что бы студенты, и покемоны-преподователи, могли закачать на сайт свои файлы.
Запрос собственно для того чтобы отобразить кто(Фамилия, Имя, ...) прислал файл.

Теперь собственно запрос:
PHP:
$query="SELECT * FROM pok_students AS pok,pok_teachers  WHERE pok.id='".$_POST['sender_id']."' OR pok_teachers.id='".$_POST['sender_id']."'";

Теперь глюк: так не показывает, какие файлы прислали студенты, а почему-то первую строку из таблицы преподов. Если поменять местами pok_students AS pok и pok_teachers. То будет все наоборот...
 
так не показывает, какие файлы прислали студенты, а почему-то первую строку из таблицы преподов. Если поменять местами pok_students AS pok и pok_teachers. То будет все наоборот...
у тебя одинаковые поля name и вот непонятно какое из...

Код:
SELECT t.name AS teacher, s.name AS student
FROM pok_teacher t, pok_students s
WHERE ....
далее отвратительное решение:
pok.id='".$_POST['sender_id']."'
нужно делать так:
$id= intval($_POST['sender_id']);
if($id>0){.....}
 
Что-то у меня не получается...
Значит таблицы:
fel_students
Поля: id, surname, name, sname, pass
teachers
Поля: id, surname,name,sname,pass,utitul,kafedra

Необходимо будет выводить: Фамилия Имя Отчество, человека который прислал файл:

PHP:
			@mysql_pconnect("$config[server]","$config[dbuser]","$config[dbpassword]");
			@mysql_select_db("database");
						$query="SELECT * FROM defiler_files_desc ORDER BY date";
			$result=mysql_query($query);
			
			$trans=array(
				"lab"=>"Лабораторная работа",
				"home"=>"Дом. Задание",
				"rgr"=>"РГР",
				"kurs"=>"Курсовая работа"
			);
			while ($row=mysql_fetch_array($result)){
				?>
				<table align='center' cellpadding='2' cellspacing='2' border='0' width='600'>
				<tr>
					<td class='content'>
					<?=strtr($row['category'],$trans)?> - <?=$row['title']?>
					</td>
				</tr>
				<tr>
					<td class='content'>
					Описание:<br>
					<?=$row['desc']?>
					</td>
				</tr>
				<tr>
					<td class='content'>
					Добавлен: <?=date('d.m.Y H:i:s',$row['date'])?><br>
					Прислал(а):
					<?
					@mysql_select_db("userdb");
					$query2="SELECT * FROM fel_students AS fel,teachers  WHERE fel.id='".$row['sender_id']."' OR teachers.id='".$row['sender_id']."'";
					$result2=mysql_query($query2);
					$row2=mysql_fetch_array($result2);
					print "$row2[surname] $row2[name] $row2[sname]";
					?>
					</td>
				</tr>
				</table>

Меня интересует:
PHP:
$query2="SELECT * FROM fel_students AS fel,teachers  WHERE fel.id='".$row['sender_id']."' OR teachers.id='".$row['sender_id']."'";
Так как он неожиданный результат выдает. Как его исправить?
 
ё....
teachers
ID | name
1 | марьивановна

students
ID | name
1 | Nicolas Prof

$row['sender_id']= 1
Вопрос:
Кого твой запрос выберет?
 
Вот именно что id уникальные. У студентов номера студняков в стиле 315689, а для преподов генератор в свое время сделал, типа mash72UI.
И почему запрос не может нормально выбрать?
 
1. Почему нельзя тогда сделать одну таблицу для всех?
2. Учите мат-часть:
2.1. pconnect
2.2. использование @ и mysql_error()
2.3. @mysql_select_db("database"); и @mysql_select_db("userdb"); Зачем так шикарно?
3. Сделай echo $query2; и посмотри что тебе пишет
4. прочти мой первый пост этого топика
 
Все конечно великолепно. Но одну таблицу ни как нельзя. Просто из эстетических взглядов. Так как этот скрипт намеревается работать именно с двумя сразу.
А другие и из не мало работают именно со своими таблицами. Надеюсь понятно выразился :))) Так что необходимо сделать все через один запрос. Тем более с каждой таблицой работает свой факультет. Ну так как поможешь? Romantik
 
Romantik
Да все. Единственное что, mysql_error() в полной его крассе не использовал )))
 
3. Сделай echo $query2; и посмотри что тебе пишет
4. прочти мой первый пост этого топика
 
echo $query2;

Выдает вот что

PHP:
SELECT * FROM fel_students AS fel,teachers WHERE fel.id='301070' OR teachers.id='301070'
 
SELECT * FROM fel_students AS fel,teachers WHERE fel.id='301070' OR teachers.id='301070'
сделай это в любом клиенте- к примеру phpMyAdmin и посмотри результат
 
Сделал запрос в phpMyAdmin:
Получил строку, которая состоит из желательного ответа, то есть строка в которой id=301070, и к ней еще приклеелась строка из таблицы преподов(пока для тестинга в обоих таблицах по одной записи) с id=avia, ну и понятно что значения name, surname, sname переписываются строкой из преподской таблицы. Но какого фига она выбрала строку с id=avia, если сказано искать где id=301070.
Ничего не понимаю, чудеса да и только...

-~{}~ 05.03.05 01:19:

Пока реализовал макаровским методом. Работает,но нерационально. Когда начнут добавляться таблицы со студентами факультетов. То код начнет расти, и не фигово...
Вот собственно сам макаровский метод:
Вместо не работающего надлежащим образом
PHP:
<? 
                    @mysql_select_db("userdb"); 
                    $query2="SELECT * FROM fel_students AS fel,teachers  WHERE fel.id='".$row['sender_id']."' OR teachers.id='".$row['sender_id']."'"; 
                    $result2=mysql_query($query2); 
                    $row2=mysql_fetch_array($result2); 
                    print "$row2[surname] $row2[name] $row2[sname]"; 
                    ?>

Вот:
PHP:
<?
@mysql_select_db("venosuserdb");
					
					$query2="SELECT * FROM teachers WHERE id='".$row['sender_id']."'";
					$result2=mysql_query($query2);
					$row2=mysql_fetch_array($result2);
					print "$row2[surname] $row2[name] $row2[sname]";
					
					$query2="SELECT * FROM fel_students WHERE id='".$row['sender_id']."'";
					$result2=mysql_query($query2);
					$row2=mysql_fetch_array($result2);
					print "$row2[surname] $row2[name] $row2[sname]";
					
					?>

-~{}~ 05.03.05 01:21:

Теперь осталось решить как эти две строки
PHP:
$query2="SELECT * FROM teachers WHERE id='".$row['sender_id']."'"

$query2="SELECT * FROM fel_students WHERE id='".$row['sender_id']."'";

Объединить...
 
беда в том, что в двух таблицах одинаковые имена столбцов, поэтому так:
SELECT t.surname AS tname, t.name AS tname, t.sname AS tsname, s.surname AS ssurname, s.name AS sname, s.sname AS ssname FROM teachers t, fel_students s WHERE t.id='$row' OR s.id='$row'
ну и в скрипте уже проверять где нул.
 
Nicolas Prof
я подозреваю, что тебе нужен простой UNION
Код:
SELECT name, 'STUD' as who
FROM fel_students
WHERE id='301070'
UNION
SELECT name, 'TECH' as who
FROM fel_teachers
WHERE id='301070'
 
Сверху