Autor Zpráva
Slark
Profil *
Dobrý den,

poprosil bych Vás prosím o radu. Mám tabulku kde jsou řádky:

id_attr  |  id_val

   1            1
   2            3
   3            3

a potřeboval bych vybrat všechny tyto řádky id_attr i id_val mám ve foreach ale nedaří se mi poskládat dotaz, abych vybral všechny řádky (ne jen např. polovinu, ale všechny). A ještě k tomu počet řádků může být neomezený. Nevěděl by někdo jak takový select poskládat?

Děkuji Všem za radu.
Taps
Profil
Slark:
<?
mysql_query("SELECT * FROM tabulka");
?>
juriad
Profil
Ukaž svůj kód v PHP a dotaz do databáze, který používáš.
Ivan M.
Profil *
Dotaz pro výběr záznamů z databáze:

SELECT * FROM tabulka
Slark
Profil *
Jedná se o získání varianty produktu z url mám tam např. parm[barva]=cerna&parm[velikost]=xxl a potřebuji najít všechny řádky kde id_attr = velikost & val = xxl a zároveň id_attr = barva & val = cerna.
juriad
Profil
Aha, takže chceš něco, co ze zadání nebylo vůbec zřejmé:
Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení položek mající všechny hledané vlastnosti
Ivan M.
Profil *
Tak upřesnit výběr z DBA:

mysql_query("SELECT * FROM tabulka WHERE barva='".$barva."',velikost='".$velikost."'");
juriad
Profil
Chceš tu variantu se dvěma parametry.


Ivan M.:
Jsi uplne mimo. Vlastnosti produktu nejsou v tabulce produktů, ale ve vazební tabulce mezi produkty a atributy spolu s hodnotou.


SELECT p.*
FROM produkty p
JOIN parametry pa ON p.id = pa.produkt
JOIN atributy a ON pa.atribut = a.id
WHERE (a.name, pa.value) IN (('barva', 'cerna'), ('velikost', 'xxl'))
GROUP BY p.id
HAVING COUNT(DISTINCT a.name, pa.value) = 2

Přicemž ty máš nejspis hodnotu parametru uloženou ještě jinde; asi tedy použiješ ještě jeden JOIN. Ale bez databázového schématu je těžké říct, jak přesně to bude.
Pokud uživatel může zadat více přípustných hodnot pro kazdý atribut, změní se jen klauzule HAVING, kde se bude uvažovat jen první část: COUNT(DISTINCT a.name).
Slark
Profil *
juriad_
díky moc přesně toto jsem potřeboval (s kódem jste se psát nemusel mám to tam ještě trochu komplikovanější)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0