php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.01.2012, 09:46  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard In Operator und Array Daten bei Join Abfrage?

Hallo Leute,

ich habe mal ne Frage. Und zwar habe ich ne Datenbank, ich kürze das mal auf 2 Tabellen.

Eine Objekte.

Code:
id_obj | objekt
1  | bla
2  | blub
3  | other
Und Objekteigenschaften.

Code:
id_prop | id_obj | propertie
1         |     1   |   prop 1
2         |     1   |   prop 2
3         |     1   |   prop3
So nun soll es eine Suchabfrage geben wo Objekte nach Eigenschaften gesucht werden können. Die Eigenschaftsangaben im Formular sind Checkboxen und das ganze als Array definiert.

Formular.
Code:
<input type="checkbox" name="prop[]" value="1" />
<input type="checkbox" name="prop[]" value="2" />
<input type="checkbox" name="prop[]" value="3" />
Das heist der Abfragewert geht als Array an die Datenbank. Muss ich dazu den IN Operator nutzen? Weil die Eigenschaften zu einem Objekt stehen ja nicht in einem Feld drin.

Ich hoffe ich konnte meine Frage verständlich stellen und hoffe auf hilfreiche Antworten.

Gruß der Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.01.2012, 09:57  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

JOIN und IN sind schon richtig. Was musst du noch wissen?
fab ist offline   Mit Zitat antworten
Alt 25.01.2012, 10:22  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

dass man der Datenbank das Array nicht "als Klotz" ans Bein binden darf, sondern die EINZELNEN ARRAY-WERTE per Schleife iteriert werden, um den IN-Operator vernünftig aufzubauen
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 25.01.2012, 12:20  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von fab Beitrag anzeigen
JOIN und IN sind schon richtig. Was musst du noch wissen?
Das war erst mal das grundlegende was ich wissen wollte.

Zitat:
Zitat von eagle275 Beitrag anzeigen
dass man der Datenbank das Array nicht "als Klotz" ans Bein binden darf, sondern die EINZELNEN ARRAY-WERTE per Schleife iteriert werden, um den IN-Operator vernünftig aufzubauen
Das heißt praktisch man würde das so schreiben?

PHP-Code:
$sql "Select o.`name`, op.`props` From `objekte` o
          INNER JOIN `properties` op ON(o.`id_obj` = op.`id_obj`)
          WHERE"
;
foreach(
$props as $key => $value) {
    
$sql .= "op.`props` = IN (" $value ")";
}

$sql .= ";"
Ich bin grad nicht am heimischen Rechner und kann es nicht ausprobieren, deshalb die Frage.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 25.01.2012, 12:28  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nö .. verdammt nah an der CD .. aber noch nicht richtig - iterieren war von mir falsch ausgedrückt .. nimm implode

PHP-Code:
$sql "Select o.`name`, op.`props` From `objekte` o
          INNER JOIN `properties` op ON(o.`id_obj` = op.`id_obj`)
          WHERE op.`props` IN ("
;
$daten=implode(",",$props);
$sql .=  $daten.")";

// $sql .= ";";  <.. den hier braucht man innerhalb von PHP gar nicht 
außerdem solltest du die einzelnen Datenwerte auch noch escapen, und in String-Begrenzer packen, falls in deinem Array keine Zahlen drin stehen
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 25.01.2012, 12:40  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von eagle275 Beitrag anzeigen
nö .. verdammt nah an der CD .. aber noch nicht richtig - iterieren war von mir falsch ausgedrückt .. nimm implode

PHP-Code:
$sql "Select o.`name`, op.`props` From `objekte` o
          INNER JOIN `properties` op ON(o.`id_obj` = op.`id_obj`)
          WHERE op.`props` IN ("
;
$daten=implode(",",$props);
$sql .=  $daten.")";

// $sql .= ";";  <.. den hier braucht man innerhalb von PHP gar nicht 
außerdem solltest du die einzelnen Datenwerte auch noch escapen, und in String-Begrenzer packen, falls in deinem Array keine Zahlen drin stehen
Ok danke werde das zu Hause ausprobieren.
In dem Array was ich da verwende stehen definitiv immer nur Zahlen drin.
Da werde ich dann versuchen heraus zufinden ob es bei PDO Prepared Statements Besonderheiten gibt, wie bei Abfragen mit Like in der Where Klausel.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 25.01.2012, 13:47  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Dann lass dir schonmal gesagt sein, dass du dir das prepared statement händisch zusammensetzen musst, da so etwas wie "IN (?)" mit bind(array(1,2,3)) nicht funktioniert. Also z.B. so:
PHP-Code:
$sql .= "IN (" implode(','array_fill(0count($props) - 1'?')) . ")"
fab ist offline   Mit Zitat antworten
Alt 25.01.2012, 14:07  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

dann viel Erfolg beim basteln

OT .. wo steht Dynamo eigentlich aktuell ? *g*
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 25.01.2012, 14:56  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Auch an's Escaping denken, wenn kein Prepared Statement verwendet wird.
PHP-Code:
$sql .= 'IN (\''.implode('\', \''array_map(array($mysqlConnection'real_escape_string'), $props)).'\')'
Zitat:
Zitat von fab Beitrag anzeigen
PHP-Code:
$sql .= "IN (" implode(','array_fill(0count($props) - 1'?')) . ")"
array_fill() erwartet die Anzahl > 0 als zweiten Parameter, -1 ist an der Stelle also falsch, denn 1 (bei einem Prop) - 1 = 0.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 25.01.2012, 15:05  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

er sagt, datt sind reine Zahlen - da muss man wohl nicht noch escapen - zumindest, wenn das abgesichert ist
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Array das mit array_count_values erzeugt wurde wieder umwandeln ProCoder2025 PHP Einsteiger 11 16.01.2012 11:08
OUTER JOIN Abfrage, die evtl. keine Treffer zurückgeben könnte noop Datenbanken 1 27.01.2011 20:23
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
[Erledigt] array mit daten ins abc einsortieren Tobby PHP Tipps 2010 3 01.10.2010 17:46
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
[Erledigt] LEFT JOIN Daten ausgeben bei 1:n Beziehung Asipak PHP Tipps 2009 11 01.08.2009 15:27
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
[Erledigt] Daten in Session / Warenkorb array ändern? litterauspirna PHP Tipps 2008 8 13.11.2008 13:00
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Verschachteltes Array: Daten auswählen horstenpeter PHP Tipps 2006 8 14.03.2006 00:12


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum