2014-11-29 5 views
-1

Предложение SQL where в моей базе данных не работает.Sql где статья не работает

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

id  site 
1  xyz.com 
2  google.com 
3  example.com 

Я бегу этот SQL запрос

SELECT * FROM `sites` WHERE `site` = "google.com"; 

Но я получаю этот выход

MySQL returned an empty result set (i.e. zero rows). (Query took 0.0009 sec) 

I никогда не увидишь, как в моей жизни.

Update: Скриншот

Я не хочу, чтобы применить этот запрос в проекте.

SELECT * FROM `sites` WHERE `site` LIKE "%google.com%"; 

Table

# 

Query


Реальная проблема заключалась в insert команд по созданию БД. Попробуйте

INSERT INTO sites (id, site) VALUES (1, '\nxyz.com\n'), (2, '\ngoogle.com\n'), (3, '\nexample.com\n') 

и вручную проверить записи в таблице. Вы не увидите разрывов строк. Это проблема SQL, которую я заметил.

+0

Нет места, которое я проверил в таблице много раз. – Rinku

+0

Вы пробовали с одинарными кавычками? '' '(' 'google.com'') – Rizier123

+0

Двойные или одинарные кавычки не имеют значения для mysql – Mihai

ответ

5

UPDATE: OP имел невидимые символы новой строки (\ n) в своем наборе данных. @EternalPoster (и я) предположил, что Trim удалит все пробелы, но MySql Trim Documentation указывает ведущий & trailing пробелов.


Это то, что я сделал:

-- for http://stackoverflow.com/questions/27203169/sql-query-not-work-for-google-com 
-- and http://stackoverflow.com/questions/27202157/sql-where-clause-not-working 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

-- -------------------------------------------------------- 

DROP TABLE IF EXISTS `sites`; 

-- 
-- structure for table `sites` 
-- 
CREATE TABLE IF NOT EXISTS `sites` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `site` varchar(32) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; 

-- 
-- data for table `sites` 
-- 
INSERT INTO `sites` (`id`, `site`) VALUES 
(1, 'xyz.com'), 
(2, 'google.com'), 
(3, 'example.com'); 

-- 
-- select google 
-- 
SELECT * 
FROM sites 
WHERE site = 'google.com' 
; 

-- 
-- select google 
-- 
SELECT * 
FROM sites 
WHERE site = 'google.com' 
; 

и это то, что я получил:

Script Functions As Expected

Так что в моем случае, я вижу сценарий функционирует, как ожидалось.

В чем отличие вашего дела? Моя установка довольно стандартная. Тот факт, что Like '%google.com%' работает с вашим набором данных, предлагает пару вещей. Люди уже предложили TRIM, потому что выражение Like будет соответствовать невидимым символам (пробелы, вкладки, обратные пространства, нули). MySQL имеет отдельный оператор REGEXP для регулярных выражений, поэтому не представляется, что символ . используется в качестве подстановочного знака, но это может стоить внимания.

Создайте пустую базу данных и попробуйте запустить мой скрипт выше. Получаете ли вы тот же результат?

+0

Я нашел вопрос. Я экспортирую файл sql, посмотрев, что >> INSERT INTO 'sites' (' id', 'site') VALUES (1, '\ nxyz.com \ n'), (2, '\ ngoogle.com \ n') , (3, '\ nexample.com \ n'); – Rinku

+0

\ n была проблема – Rinku

+0

Спасибо вам большое за помощь. – Rinku

1

Моего первый ответ:

Используйте одинарные кавычки, SELECT * FROM сайтов WHERE сайта = 'google.com';

В отношении единственного/синтаксиса двойных кавычек, это зависит от вашего режима SQL. Из MySQL documentation:

Режим ANSI_QUOTES заставляет сервер истолковывать в двойных кавычках строки в качестве идентификаторов. Следовательно, когда этот режим включен, строковые литералы должны быть заключены в одинарные кавычки. Они не могут быть заключены в двойные кавычки. Режим SQL сервера контролируется, как описано в разделе 5.1.6 «Режимы сервера SQL».

Мой второй ответ после редактирования параметров порядка:

После просмотра скриншотов, это выглядит, как у вас есть пустая строка над URL, в базе данных или пробелов. Вам необходимо удалить его вручную или с помощью TRIM.

Чтобы проверить, если есть пробелы, вы можете использовать подстановочные:

SELECT `site` FROM `sites` WHERE `site` LIKE '%google.com%' 

Если вы получаете результат, который вы знаете, что есть пробелы.если вы хотите, чтобы обойти эту проблему, не постоянно удаляя пробелы:

SELECT TRIM(site) FROM `sites` WHERE `site` LIKE '%google.com%' 

Чтобы окончательно удалить пробелы только из одной строки:

UPDATE `sites` SET `site` = TRIM(site) WHERE `site` LIKE '%google.com%' 

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

UPDATE `sites` SET `site` = TRIM(site) 
+0

Я протестировал его, но не работал – Rinku

+0

Нет нет места или линии. Я дважды проверил. Можете ли вы проверить эту проблему на своем сервере. – Rinku

1

вы должны использовать опалить кавычки, как описано в MySQL manual. Посмотрите на последний пример. Кроме того, вы должны избавиться от `` вокруг site

SELECT * 
FROM `sites` 
WHERE site = 'google.com'; 
+0

Не работает и (сайт атрибута на '') не имеет значения – Rinku

+0

Очень странно ... вы могли бы попытаться использовать оператор LIKE вместо =? Посмотрите здесь: [SQL LIKE Operator] (http://www.w3schools.com/sql/sql_like.asp) – blckbird

+0

Я знаю это уже. я не хочу применять «LIKE». – Rinku

2

использовать этот запрос

select * from sites where site = 'google.com'; 
+0

Не работает – Rinku

+0

выберите * с сайтов, на которых сайт «google.com»; Замените оператор '=' аналогичным ключевым словом –

-1

резервного копирования данных и установить новую настройку вашего MySQL ... может быть поврежден

+0

Я делаю это в своем хосте VPS вместо localhost. – Rinku

+0

А также протестирован на двух других серверах. Вы тоже можете попробовать. – Rinku

+0

В вашем случае ... изображение, которое вы предоставили в таблице phpmyadmin .... сайты coulumn не показывают свои значения, как правило ... Я предполагаю, что дополнительные пробелы или вводимые данные вставляются с google.com ... Попробуйте php Функция «TRIM» ... Вставьте новые значения с помощью функции TRIM. вот так Sppidy

0

использование этого

select * from tb_name where col_name1 = 'your_value1' and col_name2 = 'your_value2' 
+0

Я делаю то же самое, пожалуйста, прочитайте вопрос еще раз. – Rinku

+0

используя мой запрос, я получаю данные, поэтому он работает и другой мудрый u может использовать 'SELECT * FROM sites WHERE site LIKE 'google.com'' –

+0

Но попробуйте использовать эти данные. просто введите id-1 и site-google.com, а затем примените тот же запрос. Вы можете указать на эту проблему. – Rinku

1
SELECT * FROM `sites` WHERE `site` = 'google.com'; 
+0

Это не работает. – Rinku

Смежные вопросы