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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выборка данных из базы.

Сообщения:  [1-10]   [11-18] 

 
 автор: cheops   (18.11.2004 в 11:48)   письмо автору
 
   для: chip   (18.11.2004 в 03:49)
 

Объединять запросы в MySQL можно (http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=611&page=1), но это объединение достаточно специфическое...
Вы всё правильно сделали - эту задачу следует решать именно средствами PHP.

   
 
 автор: cheops   (18.11.2004 в 11:45)   письмо автору
 
   для: chip   (18.11.2004 в 03:54)
 

Такие задачи лучше решать средствами PHP - динамически формируя SQL-запрос, всё-таки SQL для этого не предназначен...

>(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне
>кажется такое часто требуется)

За время работы форума меня такая же мысль посещала очень часто :)))

   
 
 автор: chip   (18.11.2004 в 03:54)   письмо автору
 
   для: cheops   (16.11.2004 в 22:20)
 

Ну если не обязательны это не значит что их не могут вводить!
Это значит что их могут ввести а могут и нет.
Т.Е. оставили поле не заполненным и поиск будет проходить только по заполненным полям.

(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне кажется такое часто требуется)

   
 
 автор: chip   (18.11.2004 в 03:49)   письмо автору
 
   для: glsv (Дизайнер)   (16.11.2004 в 22:16)
 

Решил как это сделать ( стоя за станком :) )
Только вопрос в MySQL можно создать такую же конструкцию с IF ? т.е. объеденять запрос средствами MySQL ?

<?php
include "powercounter21/admin/config.php";
//Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
//Выбираем базу данных
$db1 = @mysql_select_db($dbname,$dbcnx);
$sql_all='SELECT tel. * , ul. *
         FROM tel, ul
          WHERE tel.ul = ul.KOD '
;
$sql2="AND (fam = '$fam' )";
$sql3="AND ( i = '$i' )";
$sql4="AND ( o = '$o' )";
$sql_end=' LIMIT 0 , 30 ;';
if (
$fam<>'')
{
$sql_all=$sql_all.$sql2 ;}
if (
$i<>'')
{
$sql_all=$sql_all.$sql3 ;}
if (
$o<>'')
{
$sql_all=$sql_all.$sql4 ;}
$sql_all$sql_all.$sql_end;
$spisok mysql_query("$sql_all");
// Так как запрос возращает несколько строк, применяем цикл
while   ($baza mysql_fetch_array ($spisok ))
 {
echo
"<tr><td>".$baza['fam']."</td><td>".$baza['i']."</td><td>".$baza['o']."</td><td>".$baza['tel']."</td></tr> ";
         }
?>
 

   
 
 автор: cheops   (16.11.2004 в 22:20)   письмо автору
 
   для: chip   (16.11.2004 в 13:51)
 

Вот чего не понимаю - если имя и фамилия не обязательны, тогда можно их просто не включать в запрос и вывалятся все и с этими именами и фамилией и без них
SELECT tel. * , ul. * 
FROM tel, ul 
WHERE tel.ul = ul.KOD 
 LIMIT 0 , 30

   
 
 автор: glsv (Дизайнер)   (16.11.2004 в 22:16)   письмо автору
 
   для: chip   (16.11.2004 в 13:51)
 

Необязательные условия не получатся…
Если условие не будет задано, то будет искаться пустое значение. А ведь нужно не это

>Можно ли такой поис осуществлять средствами MySQL или придется всетаки писать множество запросов и выбирать их в PHP switch???

Придется либо писать множество запросов, либо формировать запрос динамически. Если переменная задана, то добавляем условие, если не задана, то не добавляем.

   
 
 автор: chip   (16.11.2004 в 13:51)   письмо автору
 
   для: ship   (16.11.2004 в 13:36)
 

SELECT tel. * , ul. *
FROM tel, ul
WHERE tel.ul = ul.KOD
AND fam = 'Иванов' LIMIT 0 , 30 ;"
А как в этот запрос добавить ИМЯ ФАМИЛИЮ и ...
чтоб параметры поиска были не обязательные?
Если так:
SELECT tel. * , ul. *
FROM tel, ul
WHERE tel.ul = ul.KOD
AND (fam = '$fam' AND i='i') LIMIT 0 , 30 ;"
То он найдет по имени и фамилии но если поле будет не заполненное скажем с именем он не чего не покажет ???
Можно ли такой поис осуществлять средствами MySQL или придется всетаки писать множество запросов и выбирать их в PHP switch???

   
 
 автор: ship   (16.11.2004 в 13:36)
 
   для: ship   (16.11.2004 в 12:46)
 

<?php
include "powercounter21/admin/config.php";
//Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
//Выбираем базу данных
$db1 = @mysql_select_db($dbname,$dbcnx);


         
$spisok mysql_query("SELECT tel. * , ul. *
         FROM tel, ul
          WHERE tel.ul = ul.KOD
         AND fam = 'Иванов' LIMIT 0 , 30 ;"
);

// Так как запрос возращает несколько строк, применяем цикл
while   ($baza mysql_fetch_array ($spisok ))
 {
echo
"<tr><td>".$baza['fam']."</td><td>".$baza['i']."</td><td>".$baza['o']."</td></tr> ";
         }
?>

Так работает ! Где то в условии ошибка ... была

   
 
 автор: ship   (16.11.2004 в 12:46)
 
   для: cheops   (16.11.2004 в 11:00)
 

в таблице ul колонка код= в таблице tel колонки ul
Так у них же тип вроде различается - вообще при связке лучше если бы типы совпадали

Я подправил и сделал оба TINYINT(4)
Я имел ввиду запрос на поиск.
Что не получается сделать в phpmyadmin делаю вот такой запрос :

SELECT tel. * , ul. * 
FROM tel, ul
WHERE tel.ul = ul.KOD AND fam = 'Иванов' LIMIT 0 , 30 

Все нормально работает а вот вывести таблицу не получается


<html>
<body>
<table  border="1" cellpadding="2" cellspacing="0" bordercolordark="white" bordercolorlight="gray" align="center" width=100% >
<?php
include "powercounter21/admin/config.php";
//Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
//Выбираем базу данных
$db1 = @mysql_select_db($dbname,$dbcnx);
$spisok mysql_query("SELECT tel. * , ul. *
         FROM tel, ul ;"
);
if(
$spisok)
{
// Так как запрос возращает несколько строк, применяем цикл

$spisok mysql_query("SELECT tel. * , ul. *
         FROM tel, ul
          WHERE tel.ul = ul.KOD
         AND fam = 'Иванов' LIMIT 0 , 30 ;"
);

 while   (
$baza mysql_fetch_array ($spisok ))
 {
echo
"<tr><td>".$baza['fam']."</td><td>".$baza['i']."</td><td>".$baza['o']."</td></tr> ";
         }
}
         else
         {
         echo 
"<p><b>Ошибка: ".mysql_error()."</b></p>" ;
         exit();
         }

?>
</table>
</body>
</html>

Где я тут скосячил?
Вот время выборки показанное программой SQLyog (бесплатная и весит меньше метра и не русская %( )
[13:38:41][ 113 ms] SELECT tel. * , ul. *
FROM tel, ul
WHERE tel.ul = ul.KOD
А поиск шел где то секунд 20 или эти 20 секунд шло на отображения???
как ни как (92478 row(s) returned) немало да и дома у меня не сервак.

   
 
 автор: cheops   (16.11.2004 в 11:00)   письмо автору
 
   для: chip   (16.11.2004 в 07:50)
 

Хм... так и осуществляйте
INSERT INTO tel VALUES (NULL,'$fam','$i','$o',$ul,'$dom',$kvartira,'$tel')

Те, переменные которые окажутся пустыми просто подставят в выражение пустые строки. Только числовые значения следует проверить, чтобы избежать ошибки при формировании SQL-запроса:
<?php
  
if(empty($ul)) $ul 0;
  if(empty(
$kvartira)) $kvartira 0;
?>

>В таблице tel "i" и "o" хранят только одну букву их же лучше сделать char?
Можно. Здорово в месте и скорости съэкономите (особенно учитывая размер таблицы).
>Изначально в базе не было колонки id я ее сам добавил пока сам не знаю зачем :)
Я думаю пригодится - это же уникальный номер - в номере телефона всегда можно ошибится и набрать его два раза, а этот нет.
>И что лучше индексировать
tel - особенно если соритровать и искать по этому полю собираетесь
>в таблице ul колонка код= в таблице tel колонки ul
Так у них же тип вроде различается - вообще при связке лучше если бы типы совпадали и каждый из концов был проиндексирован.

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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