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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Добавить данные, в запрос выборки из таблицы?
 
 автор: xpom   (01.09.2008 в 21:13)   письмо автору
 
 

Можно ли в результат, который выбирает из таблицы данные:

$res = mysql_query("SELECT name FROM table WHERE  id = ".$_GET['per'],$db);

, включить еще одну строку данных, но так чтобы они добавились первой строкой в переменную $res или такое не возможно сделать?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 21:26)   письмо автору
 
   для: xpom   (01.09.2008 в 21:13)
 

можно, только осторожно)
как вам надо?

  Ответить  
 
 автор: xpom   (01.09.2008 в 21:45)   письмо автору
 
   для: Balamut182   (01.09.2008 в 21:26)
 

Я вывожу данные из таблицы в три столбика checkbox вот таким образом:


<?php
$kol_yach
=3;
$namedmysql_query("SELECT name FROM tabl WHERE  id = ".$_GET['id'],$db);
 
$idt mysql_query("SELECT id FROM tabl WHERE  id = ".$_GET['id'],$db);
  if(
mysql_num_rows($named))
  {
        
$vniz= (int)(mysql_num_rows($named)/$kol_yach);
        if(
mysql_num_rows($named)%$kol_yach$vniz++;
          
//включаем в список данные не из таблицы...которые нужно вывести в списке первыми
          
$idd=150;//id данных
          
$named="Имя";//само имя данных
  

          
echo "<table>";
    for(
$i 0$i $vniz$i++)
    {
           echo 
"<tr>";
           for(
$j 0$j $kol_yach$j++)
          {
        
              
$namev=@mysql_result$idt$j*$vniz $i);
              
$nazv=@mysql_result($named$j*$vniz $i);
          
             if(!empty(
$namev))
            {
            echo 
'<td><input name="'.$namev.'" type="checkbox" value="ON">'.$nazv.'</td>';
            }
         }
      echo 
"</tr>";
    }
     echo 
"</table>";
  }
?>


Нужно добавить эти дополнительные данные в список на первое место?

  Ответить  
 
 автор: ronin80   (02.09.2008 в 09:06)   письмо автору
 
   для: xpom   (01.09.2008 в 21:45)
 

можно использовать UNION для склеивания двух разных наборов данных, но должны соответствовать типы данных столбцов и их количество

  Ответить  
 
 автор: xpom   (02.09.2008 в 20:00)   письмо автору
 
   для: ronin80   (02.09.2008 в 09:06)
 

Да, данные соответствуют, скажите а как воспользоваться этим склеиванием UNION? Можно на примерчике показать...

  Ответить  
 
 автор: ronin80   (02.09.2008 в 21:08)   письмо автору
 
   для: xpom   (02.09.2008 в 20:00)
 

ну если например у вас такой запрос

SELECT name FROM table WHERE id = значение1

то можно добавить в начало строки/строку из этой же таблицы но с другим условием отбора, например

SELECT name FROM table WHERE id = значение2
UNION
SELECT name FROM table WHERE id = значение1

можно склеить с данными из другой таблицы, но должны соответствовать количество и типы данных столбцов, например

SELECT name FROM table WHERE id = значение1
UNION
SELECT name FROM table2 WHERE id = значение2

  Ответить  
 
 автор: Balamut182   (02.09.2008 в 21:10)   письмо автору
 
   для: xpom   (02.09.2008 в 20:00)
 

читайте мануал
(SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
ORDER BY a;

  Ответить  
 
 автор: xpom   (02.09.2008 в 21:40)   письмо автору
 
   для: Balamut182   (02.09.2008 в 21:10)
 

Дело в том, что данные эти, которые нужно добавить, находятся не в таблице, а просто заданы в двух переменных, в таком случае не получится применить UNION?

  Ответить  
 
 автор: ronin80   (03.09.2008 в 06:07)   письмо автору
 
   для: xpom   (02.09.2008 в 21:40)
 

тогда можно так

SELECT переменная1, переменная2 FROM dual
UNION
SELECT id, name FROM table WHERE id = значение1

получится указаннаые вами переменные добавятся в набор первой строкой

  Ответить  
 
 автор: xpom   (03.09.2008 в 11:15)   письмо автору
 
   для: ronin80   (03.09.2008 в 06:07)
 

Спасибо большое, буду пробовать!

А dual это означает что без таблицы, т.е. из данного скрипта?

  Ответить  
 
 автор: ronin80   (03.09.2008 в 12:43)   письмо автору
 
   для: xpom   (03.09.2008 в 11:15)
 

dual это типа временной таблицы в оперативке, виртуальной таблицы

  Ответить  
 
 автор: Trianon   (03.09.2008 в 13:52)   письмо автору
 
   для: ronin80   (03.09.2008 в 12:43)
 

dual это не таблица вообще.
Это просто способ выдержать синтаксис оператора SELECT в тех случаях, когда ни одно из выражений не зависит от полей таблицы.

  Ответить  
 
 автор: xpom   (03.09.2008 в 14:41)   письмо автору
 
   для: Trianon   (03.09.2008 в 13:52)
 

А dual безопасно использовать, не будет он давать возможности проникновения в базу данных?

  Ответить  
 
 автор: Trianon   (03.09.2008 в 14:43)   письмо автору
 
   для: xpom   (03.09.2008 в 14:41)
 

не понял вопроса.

  Ответить  
 
 автор: xpom   (03.09.2008 в 15:07)   письмо автору
 
   для: Trianon   (03.09.2008 в 14:43)
 

Я хотел спросить будет это безопасный запрос к базе, от взломщиков?

Что-то не получается, делаю следующим образом:


$per1="слово";
$per2=144;
$named= mysql_query("SELECT ".$per1." FROM dual UNION SELECT name FROM tabl WHERE  id = ".$_GET['id'],$db);
if(!$named) exit(mysql_error());

получается выход...
может из-за того что я выбираю не все поля таблицы а только одно поле name и добавляю одно слово с переменной $per1???

  Ответить  
 
 автор: Trianon   (03.09.2008 в 15:18)   письмо автору
 
   для: xpom   (03.09.2008 в 15:07)
 

Запросы WHERE id = ".$_GET['id'] никогда не будут безопасными.

Что значит "получается выход"?

Просто напечатать текст запроса и посмотреть его перед тем, как выполнять, Вы пробовали?
Покажите здесь получившийся текст.

  Ответить  
 
 автор: xpom   (03.09.2008 в 15:46)   письмо автору
 
   для: Trianon   (03.09.2008 в 15:18)
 

Что значит "получается выход"?

Выход потому что я поставил проверять переменную запроса: if(!$named) exit(mysql_error()); значит она пустая?

Просто напечатать текст запроса и посмотреть его перед тем, как выполнять, Вы пробовали?

Вы имеете ввиду просто подставить цифры и слова в запрос? т.е. вот так:


$named= mysql_query("SELECT ".Москва." FROM dual UNION SELECT name FROM tabl WHERE  id =20",$db);

  Ответить  
 
 автор: Trianon   (03.09.2008 в 16:04)   письмо автору
 
   для: xpom   (03.09.2008 в 15:46)
 

А что значит exit(mysql_error()) ?

Нет, я имел в виду вот что:
$sql = "SELECT ".$per1." FROM dual UNION SELECT name FROM tabl WHERE  id = ".$_GET['id'];
echo $sql;

  Ответить  
 
 автор: xpom   (03.09.2008 в 17:21)   письмо автору
 
   для: Trianon   (03.09.2008 в 16:04)
 

Сделал таким образов, вот что выводит:

SELECT Москва FROM dual UNION SELECT name FROM tabl WHERE id = 20


т.е. запрос вроде правильный, а почему не работает не могу понять?

А что значит exit(mysql_error()) ?

Ну этим я проверял на наличие значения в переменной, в которую заносится результат запроса. Если нет ничего, прекратить работу скрипта...

  Ответить  
 
 автор: Trianon   (03.09.2008 в 17:29)   письмо автору
 
   для: xpom   (03.09.2008 в 17:21)
 

Если бы у Вас была реальная таблица dual и в ней был бы столбец Москва - запрос был бы правильным.
Заметьте, если бы так назывался столбец. А не если бы в столбце было написано Москва.

>А что значит exit(mysql_error()) ?
>Ну этим я проверял на наличие значения в переменной, в которую заносится результат запроса.
Ответ неверный. Смотрите мануал.

  Ответить  
 
 автор: xpom   (03.09.2008 в 17:51)   письмо автору
 
   для: Trianon   (03.09.2008 в 17:29)
 

Да по идеи так было бы правильно..
Значит таким образом не получится?

А что такое "мануал"?

  Ответить  
 
 автор: sim5   (03.09.2008 в 18:06)   письмо автору
 
   для: xpom   (03.09.2008 в 17:51)
 

manual - руководство

  Ответить  
 
 автор: Trianon   (03.09.2008 в 18:19)   письмо автору
 
   для: xpom   (03.09.2008 в 17:51)
 

>Да по идеи так было бы правильно..
>Значит таким образом не получится?
>А что такое "мануал"?

Прошу прощения. Зря я вмешался.

  Ответить  
 
 автор: ronin80   (03.09.2008 в 15:30)   письмо автору
 
   для: Trianon   (03.09.2008 в 13:52)
 

>dual это не таблица вообще.
>Это просто способ выдержать синтаксис оператора SELECT в тех случаях, когда ни одно из выражений не зависит от полей таблицы.

я просто предположил что это так, потому что в oracle это таблица, состоящая из одной строки и одного столбца

  Ответить  
 
 автор: Trianon   (03.09.2008 в 15:34)   письмо автору
 
   для: ronin80   (03.09.2008 в 15:30)
 

Было бы хорошо, если б в MySQL было бы так же.
Но оно не так.
phpMyAdmin из-за этого на dual зверски ругается на этапе промежуточных проверок.

  Ответить  
 
 автор: Root   (03.09.2008 в 19:56)   письмо автору
 
   для: ronin80   (03.09.2008 в 15:30)
 

MySQL does not require FROM DUAL if no tables are referenced.

  Ответить  
 
 автор: ronin80   (03.09.2008 в 21:30)   письмо автору
 
   для: Root   (03.09.2008 в 19:56)
 

да я в курсе, сам уже так делал, привычка от оракула осталась :)

>Прошу прощения. Зря я вмешался.

:)))

  Ответить  
Rambler's Top100
вверх

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