2012-01-31 4 views
-2

Хорошо, что название может немного вводить в заблуждение. То, что я пытаюсь сделать, это добавить любимую систему на мой сайт. У меня есть одна колонка для моих любимых вещей, и я ее установил, поэтому после каждого идентификатора элемента есть :. Как проверить строку, возвращаемую из моей базы данных (1345:13456:232:524378:324), если она содержит 232? Если бы это было так, я бы откликнулся preRend еще раз, я бы выбрал insert и вставлял этот идентификатор, а затем :. Это то, что у меня есть до сих пор:PHP проверяет, содержит ли таблица MySQL значение

<?php 
session_start(); 
require_once(".conf.php"); 
$logged = $_SESSION['logged']; 
$user = $_SESSION['user']; 
$fwdfav = $_POST['id']; 
$query = mysql_query("SELECT * FROM accountController WHERE user='$user'"); 

if ($logged == 1) 
{ 
    while ($row = mysql_fetch_array($query)) { 
    if ($row['fav-itms'] //This is where I got stuck. How to check if it contains a value.) 
     { 
      mysql_query("INSERT INTO accountController ('fav-itms') VALUES ('$fwdfav')"); 
      echo 'inserted'; 
     } 
     else 
     { 
      echo 'preRend'; 
     } 

    } 
} 
else 
{ 
    echo 'nlog'; 
} 
?> 

Большое вам спасибо! Я уверен, что здесь много ошибок, так как я очень устал.

+6

** Не храните разделительные строки в столбцах реляционной базы данных! ** Создайте отношения * many-to-many *, используя таблицу [junction table] (http://en.wikipedia.org/wiki/Junction_table) – Phil

+0

плохая идея зависит от системы, но, полагая, что вы отвечаете за код и БД, это просто не разумный способ сделать это, поскольку реляционная таблица очень проста в управлении и полностью устранит ту самую проблему, о которой вы говорите здесь. Если ваш сайт мал, то обработка взрыва и простого соединения не имеет никакого значения, поэтому рациональный аргумент заключается в том, насколько устойчивым является этот метод, и если кто-либо из живых будет готов забрать то, где вы остановились. Я был бы сумасшедшим, если бы унаследовал этот метод точно. Особенно учитывая, насколько легко создать реляционную таблицу для настройки и управления. –

+0

@JosephTorraca, в чем смысл иметь базу данных? Почему бы просто не свалить все в CSV на 400 столбцов? Разумеется, ответ заключается в том, что вы не можете легко сортировать, присоединяться, объединяться или что-либо еще в данных, которые у вас есть в этом поле. Вы делаете вашу базу данных бесполезной для этих данных. – Brad

ответ

2

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

(Btw ... Я надеюсь, что это просто пример кода, у вас есть гигантская уязвимость инъекции SQL в вашем INSERT запроса.)

Что бы сделать вместо этого создать вторую таблицу, которая будет выглядеть примерно так:

favorites (
    id int(11) NOT NULL auto_increment, 
    user_id int(11), 
    fav_id int(11) 
) 

И каждая строка представляет собой любимую пользователем пару. Тогда вы можете позволить MySQL делать тяжелую работу выяснения, то ли пользователь добавил в избранное кое-что, например,

SELECT COUNT(*) FROM favorites WHERE user_id = %d AND fav_id = %d; 
// Substitute the actual look-up values in using prepared statements 

Вы также можете так же быстро получить фактические фаворитов для пользователя и т.д.

Помните, база данных предназначена для явной цели быстрого хранения и поиска информации. PHP - это язык программирования общего назначения. Там, где это возможно, пусть MySQL делает для вас ходьбу.

(Этот совет является общим для установки с умеренной масштабируемостью.Если вам нужно обрабатывать миллионы одновременных пользователей, требуется гораздо больше оптимизации, и обычные реляционные базы данных могут быть даже не подходящими. Но у меня нет впечатления вот где вы сейчас находитесь.)

+0

Да, это просто образец кода для объяснения того, что я имел в виду. И вы правы, я не где-то в больших масштабах, миллионы запросов, хотя я бы хотел быть. Может быть, несколько лет. Это очень хороший пример того, как сделать реляционную базу данных, и я думаю, что собираюсь использовать этот точный пример на своем сайте. Бесконечно благодарен! –

1

Вы могли бы взорвать его в массиве как проверка, как:

 

$yourArr = explode(":", $row['fav-itms']); 
$checkFor = 232; 
if(in_array($checkFor, $yourArr)) { 
    //it exists 
} 
else { 
    //does not exist 
} 
 

вы имели в виду что-то вроде этого

+0

ну, если это решит вашу проблему, тогда вы могли бы ее принять. :) –

+1

Пожалуйста, не делайте этого ... читать комментарии выше и ниже. –

0

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

У меня есть база данных, хранящая информацию для моего портфолио, она содержит места для изображений.

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

Вот как я это сделал.

// connect, выберите базу данных, таблицу запросов, относящуюся к странице. Я сделал запрос для определенной строки.

if($row[columnName1]){ 
     echo '<div> displaying value </div>'; 
    } 
    if($row[columnName2]){ 
     echo '<div> displaying value </div>'; 
    } 

, что происходит, если имя_столбца1 в выбранной строке имеет значение отображения значения в сНу еще ничего. затем на колонку 2.

, если это будет сделано, как этот

if(!$row[columnName1]){ 
      //content displayed 
    } 

и столбец не содержит значения, то, что находится между {} будет побежал.

Работает так, как мне это нужно, возможно, это поможет кому-то.

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