Запрос из двух таблиц

Статус
Закрыто для дальнейших ответов.

AlexOleynik

Новичок
Регистрация
19.02.2009
Сообщения
4
Всем привет. Есть две таблицы ( в одной таблицы перечисленны все книги "medien", а в другой какие книги в данный момент на руках "ausleih") .Какай запрос нужно написать ,чтобы в калонке на веб-стронице вывадилось "на руках"-если она есть в таблице "ausleih" и "можете заказать" -если её в таблице "ausleih" нету.


Код:
<?php require_once('Connections/daabiblio.php'); ?>
<?php require_once('Connections/daabiblio.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
	case "text":
	  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
	  break;	
	case "long":
	case "int":
	  $theValue = ($theValue != "") ? intval($theValue) : "NULL";
	  break;
	case "double":
	  $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
	  break;
	case "date":
	  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
	  break;
	case "defined":
	  $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
	  break;
  }
  return $theValue;
}
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
	case "text":
	  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
	  break;	
	case "long":
	case "int":
	  $theValue = ($theValue != "") ? intval($theValue) : "NULL";
	  break;
	case "double":
	  $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
	  break;
	case "date":
	  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
	  break;
	case "defined":
	  $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
	  break;
  }
  return $theValue;
}
}

$maxRows_Recordset1 = 30;
$pageNum_Recordset1 = 0;
if (isset($_GET['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

$colname_Recordset1 = "word";
if (isset($_GET['word'])) {
  $colname_Recordset1 = $_GET['word'];
}
mysql_select_db($database_daabiblio, $daabiblio);
$query_Recordset1 = sprintf("SELECT row_id, mnummer, autor, titel, utitel FROM  medien   WHERE titel  LIKE  (%s)  OR utitel  LIKE (%s) ORDER BY row_id ASC", GetSQLValueString("%" . $colname_Recordset1 . "%", "text"),GetSQLValueString("%" . $colname_Recordset1 . "%", "text"));
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $daabiblio) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($_GET['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $_GET['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;
mysql_select_db($database_daabiblio, $daabiblio);


$query_Recordset2 =.............. "SELECT row_id, mnum FROM ausleih ORDER BY row_id ASC";.........
$Recordset2 = mysql_query($query_Recordset2, $daabiblio) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
?>





<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>



<table width="1080" border="1">
  <tr>
	<td width="43"> </td>
	<td width="135"> </td>
	<td width="141"> </td>
	<td width="498"> </td>
	<td width="119"> </td>
	<td width="104"> </td>
  </tr>
</table>

<?php do { ?>
  <table width="1079" border="1">
	<tr>
	  <td width="133"><?php echo $row_Recordset1['row_id']; ?></td>
	  <td width="136"><?php echo $row_Recordset1['titel']; ?></td>
	  <td width="142"><?php echo $row_Recordset1['autor']; ?></td>
	  <td width="348"><?php echo $row_Recordset1['utitel']; ?></td>
	  <td width="148"><?php .............echo $row_Recordset1['mnummer'];............. ?></td>
 
	 
	 </td>
	</table>
	  
	  
	  
  <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
 
  </body>
</html>
<?php
mysql_free_result($Recordset1);
 

Вложения

T_O_R

New Member
Регистрация
14.04.2009
Сообщения
8
По-моему проще было бы сделать одну таблицу с перечислением всех книг. А в ней одно поле сделать как пометку на руках или свободна.
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
У меня получился 1 запрос:

Код:
SELECT m.row_id, m.mnummer, m.autor, m.titel, m.utitel, 
a.mnum
FROM  medien m LEFT JOIN ausleih a USING(row_id)
WHERE m.titel  LIKE  (%s)  OR m.utitel  LIKE (%s) 
ORDER BY m.row_id ASC
По поводу производительности данного запроса я промолчу, но должно работать.
Проверка занятости делается: mnummer-mnum>0 значит есть свободные,
если 0, то нет.

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

AlexOleynik

Новичок
Регистрация
19.02.2009
Сообщения
4
Вывадить стала меньше чем при старом запросе .Может попробывать через шляйфу for ,но я беспонятия с чего начинать и чем закончить
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Можно и через for, сначала собраться все id из первого запроса, а потом с инструкцией IN() выполнить выборку.
Вот только хотелось бы разобраться с моим запросом, что изменилось? По идее должно работать так как надо. Можете привести выходные данные для моего запроса и для ваших 2х
 

URAN

Moderator
Регистрация
31.08.2005
Сообщения
43
"...чтобы в калонке на веб-стронице вывадилось..."
Орфография хромает. Ощущение, что дети сначала учат SQL и только потом русский язык.
 

AlexOleynik

Новичок
Регистрация
19.02.2009
Сообщения
4
Спасибо за идею "создания одного запроса" всё получается как надо.
 

Вложения

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Хорошо, тема закрыта.

P.S. Впредь обрамляйте код тегом [КОД][/КОД]
 
Статус
Закрыто для дальнейших ответов.
Верх Низ