2016-09-02 2 views
2

Так что я не уверен, как объяснить, что я ищу, но объясню, что я могу.Поиск mySQL для данных и перекрестных ссылок

У меня есть база данных mySQL со следующими именами столбцов |Name1|Name2|Name3 Это имена столбцов. Под каждой колонкой есть имя |Mark Abc|Jim Abc|Kim Abc. Хорошо, это часть 1, затем у меня есть другая таблица со следующими столбцами |Name|Weeknum|, поэтому, когда я обновляю эту таблицу, у нее будут некоторые данные, такие как |Mark Abc|Week-03|.

Итак, у меня есть вопрос, как создать скрипт PHP, который примет значение из под именем Name1 и будет искать это имя под именем и weeknum и вернуть значение, подобное этому: Week-01 Week-02 Completed Week-04.

Так в основном будут перечислены все 52 недель, и если таковые будут найдены, чтобы соответствовать Name|Weeknum, то было бы перечислить Completed, спасибо заранее

+0

[Внутреннее соединение] (http://www.mysqltutorial.org/mysql-inner-join.aspx)? – litelite

+0

'SELECT Weeknum FROM Table2 WHERE Name =?' - Это то, что вы имеете в виду? – David

+0

Я хотел бы найти все weeknum и перечислить все номера недели, и поэтому будет 'Week-01 to Week-52', и любой Weeknum, который будет найден с именем' Name', затем изменит значение Weeknum в Completed – INOH

ответ

2

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

Table 1 

    ID NAME 
    1  Mark Abc 
    2  Jim Abc 
    3  Kim Abc 

    Table 2 

    ID Weeknum 
    1 Week-03 
    1 complete 
    3 Week-09 

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

" SELECT Weeknum FROM TABLE 2 WHERE id = 1; " 

Это даст нам этот выход:

Weeknum 
Week-03 
complete 

Что случилось Марк Abc имеет идентификатор = 1 и мы искали его идентификатор Таблица 2.

Если вы сделали то, что я предлагаю, этот запрос будет делать работу

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

$FetchInfo = $conn>prepare("SELECT Weeknum FROM TABLE 2 WHERE id = 1"); 
$FetchInfo->execute(); 

While($FI = $FetchInfo->FETCH(PDO::FETCH_ASSOC)) 
    { 
    echo $FI['weeknum']."\n"; 
    } 

Теперь, если вы не хотите, чтобы использовать то, что я предлагаю вам может легко это сделать:

$FetchInfo = $conn>prepare("SELECT Weeknum FROM TABLE 2 WHERE NAME = Mark Abc "); 
    $FetchInfo->execute(); 

    While($FI = $FetchInfo->FETCH(PDO::FETCH_ASSOC)) 
     { 
     echo $FI['weeknum']."\n"; 
     } 

Tow Примечания:

  • Я использовал PDO для ввода и выполнения запроса, если вы не знаете, что это такое, дайте мне знать, чтобы я мог отредактировать ответ и заменить мой код PDO кодом Mysqli.
  • Просто в будущем, когда вы хотите ввести запрос не делать этого:

$FetchInfo = $conn>prepare("SELECT Weeknum FROM TABLE 2 WHERE id = 1"); $FetchInfo->execute();

его так опасности, и он может быть открыт для SQL Injection. Что это и как это исправить?

Что это:

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

Как исправить это в примере в этом ответе, делая это:

$FetchInfo = $conn>prepare("SELECT Weeknum FROM TABLE 2 WHERE id = ?"); 
$FetchInfo->execute(array(1)); 

Прочитайте это тоже: Prepared statements and stored procedures

Надеется, что это поможет вам.

+0

за информацию, Я попытаюсь адаптировать свой код к вашему, спасибо – INOH

+0

@INOH да нет проблем, пожалуйста, если вам нужна помощь, просто дайте нам знать = – Laith

1

Что я понял из комментариев, что вы имеете в виду что-то вдоль линий выключения

Update Table2 
Set Weeknum='Completed' 
Where Name='Mark Abc' 

Я надеюсь, что это то, что вы имеете в виду

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