|
|
|
|
|
для: chip
(18.11.2004 в 03:49)
| | Объединять запросы в MySQL можно (http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=611&page=1), но это объединение достаточно специфическое...
Вы всё правильно сделали - эту задачу следует решать именно средствами PHP. | |
|
|
|
|
|
|
|
для: chip
(18.11.2004 в 03:54)
| | Такие задачи лучше решать средствами PHP - динамически формируя SQL-запрос, всё-таки SQL для этого не предназначен...
>(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне
>кажется такое часто требуется)
За время работы форума меня такая же мысль посещала очень часто :))) | |
|
|
|
|
|
|
|
для: cheops
(16.11.2004 в 22:20)
| | Ну если не обязательны это не значит что их не могут вводить!
Это значит что их могут ввести а могут и нет.
Т.Е. оставили поле не заполненным и поиск будет проходить только по заполненным полям.
(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне кажется такое часто требуется) | |
|
|
|
|
|
|
|
для: 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> ";
}
?>
|
| |
|
|
|
|
|
|
|
для: chip
(16.11.2004 в 13:51)
| | Вот чего не понимаю - если имя и фамилия не обязательны, тогда можно их просто не включать в запрос и вывалятся все и с этими именами и фамилией и без них
SELECT tel. * , ul. *
FROM tel, ul
WHERE tel.ul = ul.KOD
LIMIT 0 , 30
|
| |
|
|
|
|
|
|
|
для: chip
(16.11.2004 в 13:51)
| | Необязательные условия не получатся…
Если условие не будет задано, то будет искаться пустое значение. А ведь нужно не это
>Можно ли такой поис осуществлять средствами MySQL или придется всетаки писать множество запросов и выбирать их в PHP switch???
Придется либо писать множество запросов, либо формировать запрос динамически. Если переменная задана, то добавляем условие, если не задана, то не добавляем. | |
|
|
|
|
|
|
|
для: 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) немало да и дома у меня не сервак. | |
|
|
|
|
|
|
|
для: 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
Так у них же тип вроде различается - вообще при связке лучше если бы типы совпадали и каждый из концов был проиндексирован. | |
|
|
|
|