/ / php link z wieloma zmiennymi o tej samej wartości - php, sql

łącze php z wieloma zmiennymi o tej samej wartości - php, sql

Kod jest przeznaczony dla witryny docuindex.net

muszę dodać wiele kategorii dla jednejdokument, i nie jestem pewien, jak to zrobić. Na przykład po kliknięciu kategorii Przyroda zobaczysz dokument x, a jeśli klikniesz na kategorię naukową, zobaczysz dokument x, jeśli należy on do obu z nich

<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!=""){
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"])).""";}
if(isset($_GET["cat2"]) && $_GET["cat2"]!=""){
$subQ = " WHERE Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";}
?>


<a href="?cat=nature">Nature</a>
<a href="?cat2=science">Science</a>

to powinno być coś w rodzaju

<a href="?cat=nature or cat2=nature">Nature</a>

<a href="?cat=scinece or cat2=science">Science</a>

Byłoby wspaniale, gdyby ktoś mógł pomóc

DZIĘKUJĘ WSZYSTKIM, zwłaszcza Samowi Sullivanowi! brakowało: <a href="?cat=scinece&cat2=science">Science</a> i zrób to dla każdej kategorii <a href="?cat=nature&cat2=nature">Nature</a> etc etc (w głównym poście napisałem OR zamiast AND). W ten sposób mogę dodać wiele głównych kategorii i podkategorii do tego samego dokumentu.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie jestem pewien, ale myślę, że szukasz MySQL OR.

<?php
$subQ = "WHERE";

if(!empty($_GET["cat"])) {
$category = mysql_real_escape_string(str_replace("_"," ",$_GET["cat"]));
$subQ .= " Category="category" OR";
}

if(!empty($_GET["cat2"])) {
$category = mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"]));
$subQ .= " Category="category" OR";
}

if($subQ == "WHERE") $subQ = "";
$subQ = substr($subQ, 0, -3); // remove trailing OR
?>

<a href="?cat=nature&cat2=science">Nature OR Science</a>

Jeśli chcesz, żeby to była natura i Nauka, możesz ustawić ORs do ANDsi zmodyfikuj ostatnią funkcję na substr($subQ, 0, -4); aby usunąć dodatkowy znak.


0 dla odpowiedzi nr 2

Spróbuj tego:

<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!="")
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"]))."" OR Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";
?>

0 dla odpowiedzi № 3

Możesz zmodyfikować kod jak poniżej:

<?php
$subQ = "";
if(isset($_GET["cat"]) && $_GET["cat"]!=""){
$subQ = " WHERE Category="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat"])).""";}
if(isset($_GET["cat2"]) && $_GET["cat2"]!=""){
$subQ .= " and Category2="".mysql_real_escape_string(str_replace("_"," ",$_GET["cat2"])).""";}
?>

0 dla odpowiedzi nr 4

Aby zrobić to dobrze, "chcesz stworzyć relację wiele do wielu między kategoriami a filmami dokumentalnymi. Aby to zrobić, kategoria nie powinna już być polem w documentary table (zakładam, że tak się nazywa). Zamiast tego utworzysz dwie nowe tabele, a category tabela zawierająca dwa pola, identyfikator kategorii i nazwę. Druga tabela to plik documentary_to_category tabela z dwoma polami, identyfikatorem dokumentu i identyfikatorem kategorii. Identyfikator dokumentu i identyfikator kategorii są obcymi kluczami odpowiednio do pliku documentary.id i category.id.

Teraz musiałbyś przepisać zapytanie do czegoś podobnego do następującego:

$categories = array();
foreach ($_GET["category"] as $categoryId) {
if (ctype_digit($categoryId)) {
$categories[] = $categoryId;
}
}

$sql = "SELECT d.id, d.name, category_id
FROM documentary d
JOIN documentary_to_category dtc
ON dtc.documentary_id = d.id
WHERE dtc.category_id IN(" . implode(",", $categories) . ")
GROUP BY d.id
HAVING COUNT(DISTINCT category_id) = " . count($categories);

Teraz Twoje linki będą wyglądać mniej więcej tak:

<a href="?category[]=1&category[]=2">Nature and Science</a>

poniżej zamieściłem graficzne przedstawienie dwóch nowych tabel:

-----------------------------------------
|            category                    |
------------------------------------------
|  id   |           name                 |
------------------------------------------
|  1    |         Science                |
|  2    |         Nature                 |
|  3    |         ...                    |
------------------------------------------

-----------------------------------------
|      documentary_to_category          |
-----------------------------------------
|   documentary_id   |    category_id   |
-----------------------------------------
|      1             |         1        |
|      1             |         2        |
|      2             |         1        |
|      2             |         3        |
|      ...           |       ...        |
-----------------------------------------