|
|
|
| Ну вот опять возникли трудности. Что не напишу все время баги получаются.
Вообщем дело такое. такой вот скрипт который выводит данные из скрипта отказывается работать.
sql_connect();//подключение к базе(работает проверено)
$sql_query="SELECT * FROM meseges LIMIT 0 , 15";
sql_execute();//Выполнение запроса(работает проверено)
$res=$sql_res;
while ($row = mysql_fetch_array($res)) {
$sql_quary="select * from users where id_user = '".$row['id_user']."'";
sql_execute();
$name= mysql_fetch_array($sql_quary);//вот тут и происходит петрушка
echo .$row['post_subject']."<br>";
echo $name['name_user']
}
sql_close();
|
Ни как не хочет производить второй запрос $sql_quary="select * from users where id_user = '".$row['id_user']."'"; Вообщем я хотел сделать так. Выводть сообщения из таблицы meseges, а зная id_user найти по ниму имя из таблицы users. Вот так может я что то не правильно делаю? | |
|
|
|
|
|
|
|
для: Sin
(03.11.2004 в 18:34)
| | $sql_quary="select * from users where id_user = '".$row['id_user']."'";
кажется, тут многовато кавычек. а если вот так:
$sql_quary="select * from users where id_user = ".$row['id_user']; | |
|
|
|
|
|
|
|
для: elenaki
(03.11.2004 в 20:14)
| | $sql_qu??? a ???ry
<?php
$sql_quary = "SELECT * FROM users WHERE id_user = '".$row['id_user']."';";
?>
|
| |
|
|
|
|
|
|
|
для: Sin
(03.11.2004 в 18:34)
| | А почему Вы в эту строку подставляете текстовую переменную $sql_quary?
<?
$name= mysql_fetch_array($sql_quary);//вот тут и происходит петрушка
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(03.11.2004 в 21:02)
| | Точно!!!!!!! Нуна sql_res писать. Савсем голова не работает. Пасиба большое всем!!! :0) | |
|
|
|
|
|
|
|
для: Sin
(03.11.2004 в 18:34)
| | Вы хотите для вывести сообщения и авторов для каждого сообщения?
В принципе это можно сделать за один запрос:
Не знаю структуру Ваших таблиц, но вот аналогичный запрос для нашего форума:
themes - таблица с темами
authors - таблица авторов
Обе таблицы связаны по идентификатору автора - id_author
<?
$query="SELECT themes.name As nametheme, authors.name As name FROM themes, authors WHERE themes.id_author = authors.id_author LIMIT 0, 15";
$res=mysql_query($query);
if($res)
{
while ($row = mysql_fetch_array($res))
{
echo $row['nametheme']." ".$row['name']."<br>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(03.11.2004 в 21:14)
| | Агу!!! Все получилось!!! Теперья знаю новый способ запросов. Спасибо Дизайнеру. И скрипт упрастился намного. Вот класс :) | |
|
|
|
|
|
|
|
для: Sin
(03.11.2004 в 22:18)
| | Как осуществляется запрос если есть несколько полей которые могу быть не заполнены ? Т.е. некоторые поля ввода пользователь не ввел.
Можно конечно от заполненных полей формировать конкретный запрос на выборку, а можно ли выполнить такой запрос где все поля будут необязательными , т.е. ввел только квартиру или только телефон ... ?
<input type="text" NAME="fam" value="фамилия"><br>
<input type="text" NAME="i" value="Имя"><br>
<input type="text" NAME="o" value="Отчество"><br>
<input type="text" NAME="ul" value="Улица"><br>
<input type="text" NAME="dom" value="Дом"><br>
<input type="text" NAME="kvartira" value="Квартира"><br>
<input type="text" NAME="tel" value="Телефон"><br>
|
И еще вот вопрос в базе таблица сделана так:
# Структура таблицы 'tel'
CREATE TABLE 'tel' (
'Id' int(6) unsigned NOT NULL auto_increment,
'fam' text NOT NULL,
'i' text NOT NULL,
'o' text NOT NULL,
'ul' tinyint(3) NOT NULL default '0',
'dom' text NOT NULL,
'kvartira' smallint(3) NOT NULL default '0',
'tel' int(6) NOT NULL default '0',
PRIMARY KEY ('Id')
) TYPE=MyISAM AUTO_INCREMENT=92479 ;
|
вторая так:
# Структура таблицы 'ul'
CREATE TABLE 'ul' (
'ALF_NOM' int(6) unsigned NOT NULL default '0',
'KOD' tinyint(4) unsigned NOT NULL default '0',
'NAME' text NOT NULL,
PRIMARY KEY ('ALF_NOM')
) TYPE=MyISAM;
|
В таблице tel "i" и "o" хранят только одну букву их же лучше сделать char?
И что лучше индексировать
В таблице tel фамилии в алфавитном порядке id=1 фамилия на А id=92479 фамилия на Я. Изначально в базе не было колонки id я ее сам добавил пока сам не знаю зачем :) нужана ли она???
таблица tel и ul будут связаны так:
в таблице ul колонка код= в таблице tel колонки ul | |
|
|
|
|
|
|
|
для: 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
Так у них же тип вроде различается - вообще при связке лучше если бы типы совпадали и каждый из концов был проиндексирован. | |
|
|
|
|
автор: 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) немало да и дома у меня не сервак. | |
|
|
|
|
автор: 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 в 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??? | |
|
|
|
|
|
|
|
для: chip
(16.11.2004 в 13:51)
| | Необязательные условия не получатся…
Если условие не будет задано, то будет искаться пустое значение. А ведь нужно не это
>Можно ли такой поис осуществлять средствами MySQL или придется всетаки писать множество запросов и выбирать их в PHP switch???
Придется либо писать множество запросов, либо формировать запрос динамически. Если переменная задана, то добавляем условие, если не задана, то не добавляем. | |
|
|
|
|
|
|
|
для: 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
(18.11.2004 в 03:49)
| | Объединять запросы в MySQL можно (http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=611&page=1), но это объединение достаточно специфическое...
Вы всё правильно сделали - эту задачу следует решать именно средствами PHP. | |
|
|
|
|
|
|
|
для: chip
(16.11.2004 в 13:51)
| | Вот чего не понимаю - если имя и фамилия не обязательны, тогда можно их просто не включать в запрос и вывалятся все и с этими именами и фамилией и без них
SELECT tel. * , ul. *
FROM tel, ul
WHERE tel.ul = ul.KOD
LIMIT 0 , 30
|
| |
|
|
|
|
|
|
|
для: cheops
(16.11.2004 в 22:20)
| | Ну если не обязательны это не значит что их не могут вводить!
Это значит что их могут ввести а могут и нет.
Т.Е. оставили поле не заполненным и поиск будет проходить только по заполненным полям.
(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне кажется такое часто требуется) | |
|
|
|
|
|
|
|
для: chip
(18.11.2004 в 03:54)
| | Такие задачи лучше решать средствами PHP - динамически формируя SQL-запрос, всё-таки SQL для этого не предназначен...
>(Вот этот пример Можно ОТРЕДАКТИРОВАТЬ и поместить в учебничек PHP , мне
>кажется такое часто требуется)
За время работы форума меня такая же мысль посещала очень часто :))) | |
|
|
|