|
Как правильно написать запрос на MySQL?Обсуждение темы Как правильно написать запрос на MySQL? в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Это первая попытка, посмотрите пож.все ли правильно я делаю, а то что то страшновато ... Код: $Q1 = mysql_query("SELECT ip, data_vx, COUNT(ID) AS ... |
|
Опции темы |
23.02.2010, 13:10 | #1 |
|
Это первая попытка, посмотрите пож.все ли правильно я делаю, а то что то страшновато ...
Код:
$Q1 = mysql_query("SELECT ip, data_vx, COUNT(ID) AS 'Options' FROM inform WHERE (ip=$ip) AND (data_vx=$data_vx)"); if(mysql_num_rows($Q1) >0) {$r = mysql_fetch_array($Q1) } if ($r['Options']>100) echo 'вы превысили лимит ввода данных на сегодня, приходите к нам завтра'; |
|
23.02.2010, 21:37 | #2 |
|
Ну работать то должно, но масло масленное у вас получилось.
1. COUNT(ID) - вообщето агрегативные функции сами по себе смысла несут мало. Их холосо использовать с GROUP BY. например так. SELECT ip, data_vx, COUNT(ID) AS 'Options' FROM inform GROUP BY ip, data_vx кстати, быстрее отработает так: SELECT ip, data_vx, COUNT(*) AS 'Options' FROM inform GROUP BY ip, data_vx Это вам выдаст таблицу, где для каждого ip, data_vx будет количество операций. Ваше же выражение выдаст лишь одну строку в любом случае, и было бы не рабочим, если бы вы не поставили WHERE. Но вам же нужна не вся таблица, а только ряд её. и COUNT вам в целом то не нужен. Нужно делать так: PHP код:
|
|
23.02.2010, 23:11 | #3 |
|
Позвольте с вами не согласиться, мне как раз и нужна одна строка с общим количеством записей за один день и по одному (конкретному айпи адресу), а вот у вас при группировке получаеся энное количество уникальных записей , которые мне совершенно без пользы. Или к вашему запросу нужно еще ставить фильтр на конкретный день и айпишник или как то по другому нужно организвать запрос, к сожалению ваш пример не приводит к нужному результату, может быть вы попытаетесь еще раз ... но в любом случае спасибо , что попытались помочь.
|
|
23.02.2010, 23:13 | #4 |
|
|
|
23.02.2010, 23:24 | #5 |
|
прочитал еще раз, у вас в примере выйдет только одна строка, первая скорее всего, где будет совпадать данное условие, но и все, а мне нужно получить количество строк , удовлетворяющее данному условию, разве не так?
|
|
23.02.2010, 23:43 | #6 |
|
Учимся читать SQL по русски:
SELECT ID FROM inform WHERE ip = $ip AND data_vx = $data_vx Выбрать все записи из таблицы inform, у которых ip и data_vx соответствует заданным значениям (ну $ip и $data_vx). Все соответствующие записи. И после этого функция mysql_num_rows($Q1) нам вернёт количество таких вот записей. Да, кстати: $ip как я понимаю строка. А сторки в такм виде указывать нельзя. Нужно SELECT ID FROM inform WHERE ip = '$ip' AND data_vx = '$data_vx' заключать их в кавычки. Без кавычек можно оставлять только числа. Но и их можно заклюить в кавычки - хуже не будет. И так на всякий случай неплохо предварительно проэскейпить: $ip = mysql_escape_string($ip); $data_vx = mysql_escape_string($data_vx); Добавлено через 2 минуты И на закусочку: метод взлома и порчи сайтов, проводимый за счёт отсутствия кавычек в SQL - строках или отсутствия эскейпов называется SQL-инъекцией Последний раз редактировалось Асмодиан; 23.02.2010 в 23:43.. Причина: Добавлено сообщение |
|
23.02.2010, 23:53 | #7 | |
|
Цитата:
|
|
|
24.02.2010, 13:15 | #8 |
|
vt-aas, эээээххх... умение слушать - это тоже искусство.
Учимся читать php по русски: mysql_num_rows - вернуть количество строк, выбранных в запросе. Понимете или нет? Простите, уважаемый, но серьёзно прошу лишь послушать программиста, имеющего опыт работы с БД уже более 7 лет. То есть понимаете, что делает мой пример: 1. Выбирает все записи для заданного ip и заданного data_vx. А потом функция mysql_num_row возвращает количество таких запией. Разве вам не это нужно? И правда проще нежели делать масло маслянное? А насчёт ip - давайте объясню. $ip = "192.168.0.1" $data_vx = "lalala" SELECT ID FROM inform WHERE ip = $ip AND data_vx = $data_vx после подстановки значений, и перед тем как строка попадят в SQL, она будет преобразованна так: SELECT ID FROM inform WHERE ip = 192.168.0.1 AND data_vx = lalala как вы думаете, это корректный синтаксис? В любом языке программирования, любые строковые константы должны быть заключены в кавычки (одинарные или двойные, в зависимости от требований языка) А в той строке, которая отправиться в SQL этих кавычек нет. на этой строке всё у вас упадёт. PS. Очень сложно с вами. Ведь и советы даю дельные, и разжовываю всё по пальцам, а вы только возражаете, хотя знаний SQL да и PHP у вас явно недостаточно. |
|
Этот пользователь сказал спасибо Асмодиан за это полезное сообщение: | Вертер (24.02.2010) |
24.02.2010, 16:42 | #9 |
|
Спасибо вам огромное, теперь все понятно, ну не всем же быть таким умным, очень много людей посредственных, что делать кого то природа наделила, а кому то недодала чего то, но не хочется бросать начатое на середине, вот и приходится просить помощи, а вы думаете это легко просить, нет не так то и просто, лучше уж читать до посинения литературу и не спрашивать, но если и это не помогает, тогда на форум, вот так и живем, как можем и как получается... спасибо!!!
|
|
24.02.2010, 23:26 | #10 |
|
Не забудьте про эскейпы - очень и очень полезная привычка.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос? | kostia | ASP, Perl, PHP и MySQL | 11 | 08.02.2015 14:52 |
запрос оценки | Milestone | Зал дебютантов | 14 | 13.07.2009 17:37 |
Запрос на доступ | Freeze | Библиотека | 2 | 20.01.2007 12:08 |
MySQL запрос? | viTTas | ASP, Perl, PHP и MySQL | 2 | 26.09.2005 14:53 |
Как правильно написать Css -файл??? | Green | HTML, CSS, JavaScript | 6 | 26.02.2005 17:39 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|