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

  • Автор темы 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. То будет все наоборот...
 

Romantik

TeaM PHPClub
так не показывает, какие файлы прислали студенты, а почему-то первую строку из таблицы преподов. Если поменять местами 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){.....}
 

Nicolas Prof

Guest
Что-то у меня не получается...
Значит таблицы:
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']."'";
Так как он неожиданный результат выдает. Как его исправить?
 

Romantik

TeaM PHPClub
ё....
teachers
ID | name
1 | марьивановна

students
ID | name
1 | Nicolas Prof

$row['sender_id']= 1
Вопрос:
Кого твой запрос выберет?
 

Nicolas Prof

Guest
Вот именно что id уникальные. У студентов номера студняков в стиле 315689, а для преподов генератор в свое время сделал, типа mash72UI.
И почему запрос не может нормально выбрать?
 

Romantik

TeaM PHPClub
1. Почему нельзя тогда сделать одну таблицу для всех?
2. Учите мат-часть:
2.1. pconnect
2.2. использование @ и mysql_error()
2.3. @mysql_select_db("database"); и @mysql_select_db("userdb"); Зачем так шикарно?
3. Сделай echo $query2; и посмотри что тебе пишет
4. прочти мой первый пост этого топика
 

Nicolas Prof

Guest
Все конечно великолепно. Но одну таблицу ни как нельзя. Просто из эстетических взглядов. Так как этот скрипт намеревается работать именно с двумя сразу.
А другие и из не мало работают именно со своими таблицами. Надеюсь понятно выразился :))) Так что необходимо сделать все через один запрос. Тем более с каждой таблицой работает свой факультет. Ну так как поможешь? Romantik
 

Nicolas Prof

Guest
Romantik
Да все. Единственное что, mysql_error() в полной его крассе не использовал )))
 

Romantik

TeaM PHPClub
3. Сделай echo $query2; и посмотри что тебе пишет
4. прочти мой первый пост этого топика
 

Nicolas Prof

Guest
echo $query2;

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

PHP:
SELECT * FROM fel_students AS fel,teachers WHERE fel.id='301070' OR teachers.id='301070'
 

Romantik

TeaM PHPClub
SELECT * FROM fel_students AS fel,teachers WHERE fel.id='301070' OR teachers.id='301070'
сделай это в любом клиенте- к примеру phpMyAdmin и посмотри результат
 

Nicolas Prof

Guest
Сделал запрос в 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']."'";
Объединить...
 

SNiP

Новичок
беда в том, что в двух таблицах одинаковые имена столбцов, поэтому так:
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'
ну и в скрипте уже проверять где нул.
 

chira

Новичок
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'
 
Сверху